gpt4 book ai didi

c - 在递归函数中返回

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

我试图了解如何在 C 中使用递归,但我无法理解 return在其中工作。

请考虑以下代码:

int     recur(int i)
{
printf("recur: i = %d\n", i);
if (i < 3)
{
recur(i + 1);
return 10;
}
else if (i < 5)
recur(i + 1);
return i;
}

int main(void)
{
int i = 0;
i = recur(i);
printf("i = %d\n", i);
return 0;
}

输出是:
recur: i = 0
recur: i = 1
recur: i = 2
recur: i = 3
recur: i = 4
recur: i = 5
i = 10

最后返回什么, return i , 做?这段代码甚至有意义吗?

最佳答案

函数的递归调用不要对返回值的影响。只有第一个return在递归函数的第一个实例中遇到将向父函数返回一个值。任何其他 return met 只会停止程序当前所在的函数实例。

因此,由于函数在 main 中被调用,参数为 0

int     i = 0;
i = recur(i);

第一个 return met 位于 if 内陈述:
if (i < 3)
{
recur(i + 1);
return 10;
}

在这种情况下, recur在将值返回给 main 之前调用函数.它将创建 recur 的另一个实例这会做一些事情,但是在这个 recur 实例之后已经结束, recur的主实例将继续,在这种情况下,将返回 10 给函数 main .

要知道您的递归函数将返回什么 main函数,您可以简单地注释对该函数的新实例的所有调用:
int     recur(int i)
{
if (i < 3)
{
//recur(i + 1);
return 10;
}
else if (i < 5)
{
//recur(i + 1);
}
return i;
}

在这种情况下,这就是程序将读取的内容:
int     recur(int i)
{
if (i < 3)
return 10;
return i;
}

关于c - 在递归函数中返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44241734/

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