题目
从标准输入读入一个正整数 limit,使用 <code>while</code> 循环生成所有不超过 limit 的斐波那契数列项(Fibonacci Sequence),并以向量形式输出。
输入格式:一行输入一个正整数 limit。
输出格式:输出生成的斐波那契序列及序列长度。
数据范围与约定:limit ≥ 1。
思路与算法
1. while 循环适用场景
当循环迭代次数无法在事先明确预知(依赖动态终止条件)时,使用 while condition ... end。
2. 斐波那契递推
初始项 $F_1 = 1, F_2 = 1$,之后每一项 $F_k = F_{k-1} + F_{k-2}$。
3. 循环终止判定
计算出新的一项 next_val 后,若 next_val > limit 则立即跳出循环,不可将其填入结果数组中。
完整程序
% Octave / MATLAB 第53题:while 循环生成斐波那契数列
[limit, count] = scanf("%d", 1);
if count < 1 || limit < 1
fprintf("错误:请输入大于等于 1 的正整数上界。\n");
return;
end
% 基础项初始化
if limit == 1
fib = [1, 1];
else
fib = [1, 1];
while true
next_val = fib(end) + fib(end - 1);
if next_val > limit
break;
end
fib = [fib, next_val]; % 动态扩充
end
end
fprintf("上界阈值: %d\n", limit);
fprintf("生成的斐波那契数列 (共 %d 项):\n", length(fib));
disp(fib);运行示例
示例 1:
输入:
50输出:
上界阈值: 50
生成的斐波那契数列 (共 9 项):
1 1 2 3 5 8 13 21 34示例 2:
输入:
100输出:
上界阈值: 100
生成的斐波那契数列 (共 11 项):
1 1 2 3 5 8 13 21 34 55 89