如何用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
相关产品推荐
相关产品推荐

