#include<stdio.h>
#include<conio.h>
int add(int n);
void main()
{
int n, ans;
clrscr();
printf("Enter Number:");
scanf("%d", &n);
ans = add(n);
printf("%d", ans);
getch();
}
int add(int n)
{
if (n==0)
{
return 0;
} else {
return n + add(n-1);
}
}
我有一些疑问相关的递归程序有这种类型的return语句。任何人都可以以适当的方式解释我。
如果我在n == 0时写回0,那么我无法理解那个东西那么为什么它从else返回值。为什么回答不是0.我在回复陈述中感到困惑。
Plz帮助我。
谢谢你。
答案 0 :(得分:3)
让我们举一个简单的例子:add(2)
。
在初次通话中,我们转到else
分支(因为n
不为零)并执行return 2 + add(2 - 1)
(即return 2 + add(1)
)。
这会导致第二次调用,这也会转到else
分支并执行return 1 + add(1 - 1)
(即return 1 + add(0)
)。
这导致n
等于零的调用,因此我们返回零。
返回return 1 + add(1 - 1)
部分,等于return 1 + 0
,所以返回。
返回return 2 + add(2 - 1)
部分,现在等于return 2 + 1
。
然后我们回到初始调用,给出结果3
。
它可以放在像
这样的树中add(2) -> return 2 + add(2 - 1)
add(1) -> return 1 + add(1 - 1)
add(0) -> return 0
add(1) -> return 1 + 0
add(2) -> return 2 + 1