遞迴和尾遞迴

kbqlm發表於2024-03-18

// 遞迴求5!
// 基本遞迴

#include <stdio.h>

int fun(int n)
{
    if (1 == n)
    {
        return 1;
    }
    else
    {
        return n*fun(n-1);
    }
    
}

int main(int argc, char *argv[])
{
    int num;
    scanf("%d", &num); // 輸入num的值,要求大於1
    printf("%d! = %d", num, fun(num));
    return 0;
}

輸入
5
輸出:
5! = 120

// 尾遞迴
// 1.當遞迴呼叫是整個函式體中最後執行的語句且它的返回值不屬於表示式的一部分時,這個遞迴呼叫就是尾遞迴
// 2.尾遞迴呼叫,其實最精髓就是透過引數傳遞結果,達到不壓棧的目的。

#include <stdio.h>

int fun(int n, int temp)
{
    if (n > 1)
    {
        fun(n-1, temp*n);
    }
    else
    {
        return temp;
    }
}

int main(int argc, char *argv[])
{
    int num;
    int sum = 1;
    scanf("%d", &num); // 輸入num的值,要求大於1
    printf("%d! = %d", num, fun(num, sum));
    return 0;
}

輸入
5
輸出:
5! = 120

相關文章