无法理解当我运行这段代码时会发生什么

标签 c function recursion

我不明白为什么 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/

相关文章:

python - 如何以安全的方式从异步函数调用同步函数

python - 使用 Py_BuildValue() 在 C 中创建元组列表

c - C中的基本流处理

单引号内的 PHP 函数显示为文本

c - C语言打印一行长度的程序

Python 递归维护键控深度

function - 带返回的Powershell递归

c - 正确使用文件指针

c - sizeof 参数

asp.net-mvc - 在 Asp.Net Mvc 中递归呈现局部 View 是个坏主意吗?