2016-02-29 68 views
-3
#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

+2

首先被解僱了,你說的C,那你說C++。並且不要告訴我你正在以這種方式實際地格式化你的代碼? –

+0

你爲什麼要用遞歸函數呢? –

+0

_「我不能理解那件事,如果我寫的時候返回0當n == 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 
+0

真的很有用,我明白這件事,但我NIT得到那個地方將返回值.. –

+0

如果(N == 0)返回0將其返回到主()... –

+0

@KeyurShah瞭解如何使用調試器(無論如何遲早都需要執行)並逐行執行代碼,逐步進入遞歸調用。查看代碼的位置,查看'n'變化的值,查看返回值。它應該有希望的幫助。 –