- 计算第五个人年纪和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$