• 函数的递归调用例子学习


    • 计算第五个人年纪和5!的例子:

      

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5 
     6     int age(int n);
     7     int jiecheng(int n);
     8 
     9     printf("five the age is : %d.
    ", age(5));
    10     printf("!5 is : %d.
    ", jiecheng(5));
    11 
    12     return 0;
    13 }
    14 
    15 int age(int n)
    16 {
    17     int c;
    18     if (1 == n)
    19         c = 10;
    20     else
    21         c = age(n-1) + 2;
    22 
    23     return c;
    24 }
    25 
    26 int jiecheng(int n)
    27 {
    28     /* n == 1;  1! = 1;
    29      * n > 1;   n! = n * (n - 1)!;
    30      */
    31 
    32     int a;
    33     if (n < 0)
    34     {
    35         printf("input is error.
    ");
    36         return 0;
    37     }
    38     if ((1 == n) || (0 == n))
    39         a = 1;
    40     else 
    41         a = n * jiecheng(n - 1);
    42 
    43     return a;
    44 }
    • 汉诺塔的步骤

      

     1 #include <stdio.h>
     2 void hanoi(int n, char A, char B, char C);
     3 void move(char M, char N);
     4 
     5 int main()
     6 {
     7     hanoi(3, 'A', 'B', 'C');
     8     return 0;
     9 }
    10 
    11 /*
    12  * 分3个步骤:
    13  * 1, 将A上面的n-1个盘借C移动到B上
    14  * 2, 将A上最大那个盘移动到C上
    15  * 3, 将B上n-1个盘借A移动到C上
    16  */
    17 
    18 void hanoi(int n, char A, char B, char C)
    19 {
    20     if (1 == n) //当只有一个盘子的时候 n ==1 , 这时候直接移动就可以了
    21         move(A, C);
    22     else  // 当A上的盘多于1个的时候,要分3个步骤来移动。
    23     {
    24         hanoi(n-1, A, C, B);
    25         move(A, C);
    26         hanoi(n-1, B, A, C);
    27     }
    28 
    29 
    30     return;
    31 }
    32 
    33 // 移动的具体实现方法
    34 void move(char M, char N)
    35 {
    36     printf("%c->%c.
    ", M, N);
    37     return;
    38 }

       运行结果:

       

    liweilijiedeMacBook-Pro:programs liweilijie$ ./hanoi 
    A->C.
    A->B.
    C->B.
    A->C.
    B->A.
    B->C.
    A->C.
    liweilijiedeMacBook-Pro:programs liweilijie$ 
  • 相关阅读:
    webmagic的使用学习
    redis在macOS上的安装及与springboot的整合使用
    Swagger-UI
    个人作业——软件工程实践总结&个人技术博客
    祝贺大野鸡喜提小黄衫一件
    软件评测(个人作业)
    结对第二次作业
    Springboot项目创建文件中相对路径问题
    二进制翻转
    欧拉降幂及广义欧拉降幂证明
  • 原文地址:https://www.cnblogs.com/liweilijie/p/4807574.html
Copyright © 2020-2023  润新知