在C中使用递归添加数字

时间:2016-02-29 17:44:38

标签: 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);
      }
    }

我有一些疑问相关的递归程序有这种类型的return语句。任何人都可以以适当的方式解释我。 如果我在n == 0时写回0,那么我无法理解那个东西那么为什么它从else返回值。为什么回答不是0.我在回复陈述中感到困惑。
Plz帮助我。 谢谢你。

1 个答案:

答案 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