我很难理解递减的斐波那契数的递归,试图用手对其进行评估,但没有成功。
在评估代码时,我认为它将从以下内容开始:
(5,1,2)
但是,它始于:
(1、8、13)
(2、5、8)等
我在这里完全迷路了。有人可以解释为什么会这样吗?
#include <stdio.h>
#include <stdlib.h>
void fib_dec_a ( int n, int f1, int f2 ) {
if ( n > 1 ){
fib_dec_a ( n - 1, f2, f1 + f2 );
}
printf ("%d\n", f1);
}
int main () {
int n;
printf ( "Enter the length of descending Fibonacci sequence: " );
scanf ( "%d", &n);
printf ( "\nDescending sequence starting with an n-th element %d :\n", n );
fib_dec_a (n, 1, 1 );
return 0;
}
对于n = 6:
8
5
3
2
1个
1个
最佳答案
fib_dec_a
是阻止呼叫;该函数完成其必须执行的所有指令后,才会继续执行。结果,为了达到n == 1
的情况,必须先完成n == 2
的情况。然后,同样适用于n == 3
情况; n == 4
情况必须先完成执行。
结果,将为较低值printf
的所有n
语句首先执行,因为其被调用方(n + 1
)在执行之前等待返回。如果将printf
语句移到if (n > 1)
分支上方,则会发现顺序相反。
关于c - 递减的斐波那契数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34288045/