You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用do while循环在PHP中实现逆向斐波那契数列?

实现逆向斐波那契数列(基于输入两数推导至0,do-while版)

你的原有代码逻辑和需求不匹配——原代码是生成前N个正向斐波那契数再反转,而需求是从输入的两个数出发,逆向推导斐波那契序列直到0。以下是用do-while循环实现的解决方案:

核心逻辑

逆向斐波那契的本质是正向过程的逆运算:正向是后项=前两项之和,逆向则是前项=后项-前一项,直到结果为0为止(禁止出现负数)。具体步骤:

  • 确保第一个输入数大于等于第二个(若输入顺序颠倒,先交换两者)
  • 初始化结果数组,先存入初始的两个数
  • 用do-while循环计算下一个数(当前第一个数减第二个数),将非负数加入结果,然后更新两个数的位置
  • 最后输出格式化后的序列

完整代码

function reverseFibonacci($num1, $num2) {
    // 确保num1 >= num2,避免第一步就出现负数
    if ($num1 < $num2) {
        list($num1, $num2) = array($num2, $num1);
    }

    $sequence = array($num1, $num2);
    
    do {
        $nextNum = $num1 - $num2;
        // 仅添加非负数到序列中
        if ($nextNum >= 0) {
            $sequence[] = $nextNum;
        }
        // 更新数值位置,为下一次计算做准备
        $num1 = $num2;
        $num2 = $nextNum;
    } while ($nextNum > 0); // 当nextNum为0时终止循环

    // 格式化输出为逗号分隔的字符串
    echo implode(', ', $sequence);
}

// 测试示例:输入55、34
reverseFibonacci(55, 34);
// 输出:55, 34, 21, 13, 8, 5, 3, 2, 1, 0

代码说明

  • 输入顺序处理:如果用户输入的第一个数小于第二个,自动交换,避免逆向推导时直接出现负数
  • do-while循环特性:保证至少执行一次计算逻辑,即使初始输入是1和0这类边界值,也能生成正确序列
  • 终止条件:当计算出的下一个数为0时停止循环,确保序列末尾是0且无负数
  • 输出格式化:用implode将数组转为逗号分隔的字符串,完全匹配示例输出格式

内容的提问来源于stack exchange,提问作者Bhumi Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:45:20