C语言编写斐波那契数列的递归实现逻辑疑问
递归斐波那契代码逻辑说明
你之前的理解偏差核心是混淆了递归调用的计算对象:代码里相加的不是num-1和num-2两个参数本身,而是**fibonacci_series(num-1)和fibonacci_series(num-2)两个函数调用的返回值**,所有调用都要遵循函数定义的规则逐层计算,直到碰到num=0或num=1的终止条件才会返回确定值向上汇总。
基础计算规则(函数定义)
fibonacci_series(0) = 0(终止条件1)fibonacci_series(1) = 1(终止条件2)- 当
num>1时,fibonacci_series(num) = fibonacci_series(num-1) + fibonacci_series(num-2)
对应你提到的测试场景逐次计算
1. num=2
fibonacci_series(2) = fibonacci_series(1) + fibonacci_series(0) = 1 + 0 = 1
和你错误计算的结果巧合一致,所以你一开始没有发现逻辑问题。
2. num=3
你之前的错误算法:(3-1)+(3-2) = 2 + 1 = 3
正确递归计算:
fibonacci_series(3) = fibonacci_series(2) + fibonacci_series(1) // 代入已算出的fibonacci_series(2)=1、fibonacci_series(1)=1 = 1 + 1 = 2
和程序实际输出一致。
3. num=4
你之前的错误算法:(4-1)+(4-2) = 3 + 2 =5
正确递归计算:
fibonacci_series(4) = fibonacci_series(3) + fibonacci_series(2) // 代入已算出的fibonacci_series(3)=2、fibonacci_series(2)=1 = 2 + 1 = 3
和程序实际输出一致。
完整调用栈展开(以num=4为例)
可以更直观看到递归逐层拆解再汇总的过程:
fibonacci_series(4) = fibonacci_series(3) + fibonacci_series(2) = [fibonacci_series(2) + fibonacci_series(1)] + [fibonacci_series(1) + fibonacci_series(0)] = [[fibonacci_series(1) + fibonacci_series(0)] + 1] + [1 + 0] = [[1 + 0] + 1] + 1 = 3
内容的提问来源于stack exchange,提问作者mo_essmat
相关产品推荐
相关产品推荐

