我不明白为什么 effe(10) 过程的结果是 110。(这是从练习中获取的代码)
我试图写下代码中发生的事情,但是递归太多,我无法理解发生了什么。
int effe(int);
int gi(int);
int main(){
int test = effe(10);
printf("%d\n", test); //this prints 110
system("pause");
return 0;
}
int effe(int a){
if(a < 2)
return a * 2;
else
return (gi(a - 1) + gi(a - 2));
}
int gi(int a){
if (a < 2)
return effe(a);
else
return (effe(a - 1) + effe(a - 2));
}
最佳答案
在某种程度上,这是斐波那契的变体。
计算从 efff(0), gi(0) 开始的值,然后计算 efff(1), gi(1),efff(2), gi(2),直到达到 efff(10), gi( 10)
a efff(a) gi(a)
0 0 0
1 2 2
2 2=2+0 2=2+0
3 4=2+2 4=2+2
4 6=2+4 6=2+4
5 10=4+6 10=4+6
6 16=6+10 16=6+10
7 26 26
8 42 42
9 68 68
10 110 110
请注意,每一项都是斐波那契值的 2 倍 (1,1,2,3,5,8,13,21,34,55)。
关于无法理解当我运行这段代码时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58395833/