• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 設計應用 > 實例講解|徹底弄懂C語言遞歸

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

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

    1. 漢諾塔:

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

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

    #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級,輸入樓梯的級數,求不同的走法數。

    #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級,輸入樓梯的級數,求不同的走法數。

    #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. 斐波那契數列:

    請輸入項數,輸出具體數列。

    #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. 求階乘:

    請輸入整數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. 楊輝三角:

    輸入要打印的層數,打印楊輝三角。

    #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. 猴子吃桃問題:

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

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

    循環:

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

    10. 猴子吃桃問題:

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

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

    循環:

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

    11. 最大公約數:

    利用算法求兩個數的最大公約數。

    #include
    /* 最大公約數 */
    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. 逆序輸出:

    輸入一個正整數,將該正整數逆序輸出。

    #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);
    }


    關鍵詞: C語言 遞歸

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 崇礼县| 东方市| 偏关县| 闸北区| 康马县| 保康县| 浦城县| 海安县| 砀山县| 新密市| 共和县| 盈江县| 肇源县| 建昌县| 留坝县| 安多县| 隆化县| 罗甸县| 沁水县| 天津市| 孝昌县| 姚安县| 丹阳市| 龙南县| 嘉禾县| 黄平县| 鹰潭市| 巢湖市| 隆德县| 大新县| 清水河县| 启东市| 崇信县| 都昌县| 合水县| 龙山县| 迁西县| 东光县| 建宁县| 衢州市| 土默特左旗|