新聞中心

        EEPW首頁 > 設(shè)計應(yīng)用 > 實例講解|徹底弄懂C語言遞歸

        實例講解|徹底弄懂C語言遞歸

        作者: 時間:2025-03-11 來源: 收藏

        1. 漢諾塔:

        本文引用地址:http://www.104case.com/article/202503/467918.htm

        請輸入盤子數(shù),輸出盤子移動的操作步驟。

        #include
        void move(char fromchar to) {
           printf("%c to %cn"fromto);
        }
        void hanoi(int nchar achar bchar c) {
           if (n == 1)
               move(ac);
           else {
               hanoi(n - 1acb);
               move(ac);
               hanoi(n - 1bac);
          }
        }
        void main() {
           int n;
           scanf("%d"&n);
           hanoi(n'A''B''C');
        }

        2. 爬樓梯:

        樹老師爬樓梯,他可以每次走1級或者2級,輸入樓梯的級數(shù),求不同的走法數(shù)。

        #include
        intstair(intn) {
        if (n==1return1;
        if (n==2return2;
        returnstair(n-1+stair(n-2);
        }
        voidmain() {
        intn;
        scanf("%d"&n);
        printf("%d"stair(n));
        }

        3. 爬樓梯:

        樹老師爬樓梯,他可以每次走1級、2級或者3級,輸入樓梯的級數(shù),求不同的走法數(shù)。

        #include
        intstair(intn) {
        if (n==1return1;
        if (n==2return2;
        if (n==3return4;
        returnstair(n-1+stair(n-2+stair(n-3);
        }
        voidmain() {
        intn;
        scanf("%d"&n);
           printf("%d"stair(n));
        }

        4. 斐波那契數(shù)列:

        請輸入項數(shù),輸出具體數(shù)列。

        #include
        int fibonacci(int n) {
           if (n == 1 || n == 2)
               return 1;
           return fibonacci(n - 1+ fibonacci(n - 2);
        }
        void main() {
           int ni;
           scanf("%d"&n);
           for (i = 1i <= ni++)
               printf("%d,"fibonacci(i));
        }

        5. 求階乘:

        請輸入整數(shù)n,求1!+2!+3!+4!+5!+6!+7!+…+n!的和。

        #include
        int factorial(int n) {
           if (n == 1return 1;
           return n * factorial(n - 1);
        }
        void main() {
           int nisum = 0;
           scanf("%d"&n);
           for (i = 1i <= ni++)
               sum += factorial(i);
           printf("sum=%d"sum);
        }

        6. 取球問題:

        在n個球中,任意取m個(不放回),求有多少種不同取法。

        #include
        int ball(int nint m) {
           if (n < m)  return 0;
           if (n == mreturn 1;
           if (m == 0return 1;
           return ball(n - 1m - 1+ ball(n - 1m);
        }
        void main() {
           int nm;
           scanf("%d%d"&n&m);
           printf("%d"ball(nm));
        }

        7. 楊輝三角:

        輸入要打印的層數(shù),打印楊輝三角。

        #include
        int triangle(int mint n) {
           if (m == 0 || n == 0 || m == n)
               return 1;
           return triangle(m - 1n+ triangle(m - 1n - 1);
        }
        void main() {
           int nij;
           scanf("%d"&n);
           for (i = 0i < ni++) {
               for (j = 0j <= ij++) {
                   printf("%d "triangle(ij));
              }
               printf("n");
          }
        }

        8. 求年齡:

        有5個人坐在一起,問第5個人多少歲,他說比第4個人大2歲。問第4個人多少歲,他說比第3個人大2歲。問第3個人多少歲,他說比第2個人大2歲。問第2個人多少歲,他說比第1個人大2歲。最后問第1個人,他說是10歲。請問第5個人多大?

        #include
        int age(int n) {
           if (n == 1return 10;
           return age(n - 1+ 2;
        }
        void main() {
           printf("%d"age(5));
        }

        9. 猴子吃桃問題:

        猴子第一天摘下若干個桃子,當(dāng)即吃了一半,還不癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半多一個。到第十天早上想再吃時,見只剩下一個桃子了。問最初有多少個桃子。

        #include
        int peach(int n) {
           if (n == 10return 1;
           return (peach(n + 1+ 1* 2;
        }
        void main() {
           printf("%d"peach(1));
        }

        循環(huán):

        #include
        void main() {
           int is = 1;
           for (i = 9i >= 1i--) {
               s = (s + 1* 2;
          }
           printf("%d"s);
        }

        10. 猴子吃桃問題:

        猴子第一天摘下若干個桃子,當(dāng)即吃了一半,還不癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半多一個。第十天同樣是吃了前一天的一半加一個,最后剩下一個桃子。問最初有多少個桃子。

        #include
        int peach(int n) {
           if (n == 11return 1;
           return (peach(n + 1+ 1* 2;
        }
        void main() {
           printf("%d"peach(1));
        }

        循環(huán):

        #include
        void main() {
           int is = 1;
           for (i = 10i >= 1i--) {
               s = (s + 1* 2;
          }
           printf("%d"s);
        }

        11. 最大公約數(shù):

        利用算法求兩個數(shù)的最大公約數(shù)。

        #include
        /* 最大公約數(shù) */
        int gcd(int aint b) {
           int t;
           if (a < b) {
               t = a;
               a = b;
               b = t;
          }
           if (b == 0) {
               return a;
          }
           return gcd(ba % b);
        }
        void main() {
           int ab;
           scanf("%d%d"&a&b);
           printf("gcd=%d"gcd(ab));
        }

        12. 逆序輸出:

        輸入一個正整數(shù),將該正整數(shù)逆序輸出。

        #include
        void printDigit(int n) {
           printf("%d"n % 10);
           if (n > 10) {
               printDigit(n / 10);
          }
        }
        void main() {
           int n;
           scanf("%d"&n);
           printDigit(n);
        }

        13. 逆序輸出:

        輸入一個字符串,將該字符串逆序輸出。

        #include
        void printStr(char *str) {
           if (*str != '?')
               printStr(str + 1);
           if (*str != '?')
               printf("%c"*str);
        }
        void main() {
           char str[100];
           gets(str);
           printStr(str);
        }


        關(guān)鍵詞: C語言 遞歸

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 大石桥市| 彰化市| 彰武县| 新建县| 库伦旗| 柳林县| 广饶县| 盐池县| 正蓝旗| 绵竹市| 红桥区| 清远市| 邛崃市| 房山区| 伽师县| 博湖县| 云南省| 遵义县| 崇仁县| 萨迦县| 建始县| 潼南县| 偃师市| 汽车| 耒阳市| 长岛县| 恭城| 祁东县| 花莲县| 莱西市| 东乌| 鹤岗市| 永仁县| 深泽县| 南通市| 钟山县| 西安市| 深水埗区| 逊克县| 密山市| 无为县|