函数的递归调用例子学习

  • 计算第五个人年纪和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.\n", age(5));
10     printf("!5 is : %d.\n", 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.\n");
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.\n", 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$ 

 

posted on 2015-09-14 16:40  liweilijie  阅读(319)  评论(0编辑  收藏  举报

导航