题目

从标准输入读入一个正整数 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