我想了解如何在 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
, 做?这段代码有意义吗?
函数的递归调用do not对返回值的影响。只有第一个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
将继续,在本例中,将向函数返回 10main
.
要知道你的递归函数将返回什么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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)