gpt4 book ai didi

c - 递归混淆

转载 作者:行者123 更新时间:2023-12-04 10:44:14 24 4
gpt4 key购买 nike

大家好,我很难理解递归函数调用,就在我认为我已经理解它们的时候,我看到了一个问题,这让我意识到我错了我无法理解程序的流程

#include <stdio.h>
void fun(int n)
{
if(n>0)
{
fun(--n);
printf("%d\n",n);
fun(--n);
}
}
int main(void) {
int a;
a=3;
fun(a);
return 0;
}

最佳答案

这是当 n = 3 时你的函数的函数调用

f(3)
.f(2) [1]
..f(1) [1]
...f(0) [1]
...Print 0
...f(-1) [2]
..Print 1
..f(0) [2]
.Print 2
.f(1) [2]
..f(0) [1]
..Print 0
..f(-1)[2]

在哪里.表示堆栈的深度,1 和 2 指定是从循环还是第二次递归调用。

因为

f(3)

成为

f(2)
print 2
f(1)

这又变成了

f(1)
print 1
f(0)
print 2
f(0)
print 0
f(-1)

最后变成

f(0)
print 0
f(-1)
print 1
f(0)
print 2
f(0)
print 0
f(-1)

删除所有 f(n)什么时候n <= 0

print 0
print 1
print 2
print 0

关于c - 递归混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28715092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com