遞歸那些事兒

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
//求階乘
int fac(int n)
{
    if(n==1 || n<=0)
    {
        n = 1;
        return n;   
    }
    if(n>1)
    {
        return n*fac(n-1);  
    }

}
// 求累加
int add(int n)
{
    if(n==1)
    return 1;
    if(n>1)
    return n+add(n-1);  
}
// 求字符串長度
int my_strlen(const char *dest)
{
    assert(NULL!=dest);
    if('\0'==*dest)
    return 0;
    else
    {
        return 1+my_strlen(++dest);
    }
}
int main()
{
    int n = 5;
    int res = fac(5);
    int ret = add(5);
    printf("5! = %d\n1+2+3+4+5 = %d\n",res, ret);

    ret = my_strlen("2323232");
    printf("my_strlen = %d\n",ret);

}

遞歸注意事項:
遞歸雖然經典,但是也有他的缺點:
第一、遞歸是反覆地調用自己本身,函數調用的開銷遠大於循環,調用的層次越多效率越低。故建議調用深度不要太深。
第二、遞歸在操作系統中有棧的結構,會消耗一定的空間,調用深度太多可能會導致棧溢出。
第三、遞歸的條件設置一定要正確,避免產生死循環。

發佈了34 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章