添加数字使用递归在C
#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);
}
}
我有一些怀疑有这种类型的返回语句的相关递归程序。任何人都可以用适当的方式解释我。 我不能理解那件事,如果我写的时候返回0当n == 0那么它为什么从else返回值。为什么答案不是0.我很困惑,在return语句中。
Plz帮助我。 提前感谢您。添加数字使用递归在C
让作为简单的例子: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
真的很有用,我明白这件事,但我NIT得到那个地方将返回值.. –
如果(N == 0)返回0将其返回到主()... –
@KeyurShah了解如何使用调试器(无论如何迟早都需要执行)并逐行执行代码,逐步进入递归调用。查看代码的位置,查看'n'变化的值,查看返回值。它应该有希望的帮助。 –
首先被解雇了,你说的C,那你说C++。并且不要告诉我你正在以这种方式实际地格式化你的代码? –
你为什么要用递归函数呢? –
_“我不能理解那件事,如果我写的时候返回0当n == 0”_那么,递归需要在某个点停止,不是? –