nou*_*oir 2 c recursion return-value function-definition
我试图了解如何在 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;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
recur: i = 0
recur: i = 1
recur: i = 2
recur: i = 3
recur: i = 4
recur: i = 5
i = 10
Run Code Online (Sandbox Code Playgroud)
最后一个返回,return i,做什么?这段代码甚至有意义吗?
函数的递归调用不会影响返回值。只有在return递归函数的第一个实例中遇到的第一个才会向父函数返回一个值。任何其他return遇到的只会停止程序当前所在的函数实例。
因此,由于函数在 main 中被调用,参数为 0
int i = 0;
i = recur(i);
Run Code Online (Sandbox Code Playgroud)
第一次return见面位于if声明中:
if (i < 3)
{
recur(i + 1);
return 10;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,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;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这就是程序将读取的内容:
int recur(int i)
{
if (i < 3)
return 10;
return i;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11697 次 |
| 最近记录: |