關於c的遞歸調用返回值的計算

# include <stdio.h>
int Sum(int n);  //函數聲明
int main(void)
{
    int n;
    printf("請輸入n的值:");
    scanf("%d", &n);
    printf("sum = %d\n", Sum(n));
    return 0;
}
int Sum(int n)
{
    if (n <= 0)
    {
        return -1;
    }
    else if (1 == n)
    {
        return 1;
    }
    else
    {
        return n+Sum(n-1);
    }
}

假設n爲5。調用函數sum(5)執行其中的代碼。

n=5
//n爲5時sum(5)執行到return n+Sum(n-1)時,無返回值
5+sum(4)
//放入棧後,此時再次調用自身sum(4),執行到return n+Sum(4-1),無返回值
4+sum(3)
//放入棧後,此時再次調用自身sum(3),執行到return n+Sum(3-1),無返回值
3+sum(2)
//放入棧後,此時再次調用自身sum(2),執行到return n+Sum(2-1),無返回值
2+sum(1)
/*放入棧後,此時再次調用自身sum(1),執行到else if (1 == n),返回值=1,
開始出棧,入棧出棧規則是先入後出,就像堆箱子,堆到頂後要從頂部開始取箱子最後才能拿到最底的箱子。
當前頂部的是2+sum1(1),所以返回值1返回到s+sum(1)即2+1=3,最頂層的返回值變爲3。
再次拿第二箱子3+sum(2)即3+3=6,返回值爲6。第三層箱子4+sum(3)即4+6=10,返回值爲10。
最低層箱子5+sum(4)即5+10=15。這時返回值15再次返回到主函數main中,打印出sum(n)的最終返回值15。
這就是1-5累加合的流程。
*/



		    

下面是用遞歸求斐波那契數列(即數列中每一個數值都是其前兩個數值之和[0 1 1 2 3 5 8 13 21 34 55........])

# include <stdio.h>
long Fibonacci(int n);  //函數聲明
int main(void)
{
    int n;
    printf("請輸入n的值:");
    scanf("%d", &n);
    printf("第n項的值爲:%ld\n", Fibonacci(n));
    return 0;
}
long Fibonacci(int n)
{
    if (n < 0)
    {
        return -1;
    }
    else if (0 == n)
    {
        return 0;
    }
    else if (1 == n)
    {
        return 1;
    }
    else
    {
        return Fibonacci(n-1)+Fibonacci(n-2);
    }
}

這裏我們還假設n=5。[中括號爲當前返回值],{大括號爲2個返回值的和}。

n=5
Fibonacci(5-1){3}+Fibonacci(5-2){2}={5}最後返回5。
                  n=3
                  Fibonacci(3-1){1}+Fibonacci(3-2)[1]={2}
                  n=2               n=1返回值是[1]     最終返回值是{1}+[1]={2}
                  Fibonacci(2-1)[1]+Fibonacci(2-2)[0]={1}
                  n=1返回值是[1]    n=0返回值是[0]     最終返回值是[1]+[0]={1}
n=4
Fibonacci(4-1){2}+Fibonacci(4-2){1}={3}
                  n=2
                  Fibonacci(2-1)[1]+Fibonacci(2-2)[0]={1}
                  n=1返回值是[1]    n=0返回值是[0]     最終返回值是[1]+[0]={1}
n=3
Fibonacci(3-1){1}+Fibonacci(3-2)[1]={2}
                  n=1返回值是[1]     最終返回值是{1}+[1]={2}
n=2
Fibonacci(2-1)[1]+Fibonacci(2-2)[0]={1}
n=1返回值是[1]   n=0返回值是[0]     最終返回值是[1]+[0]={1}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章