Chinaunix首页 | 论坛 | 博客
  • 博客访问: 36012
  • 博文数量: 24
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 246
  • 用 户 组: 普通用户
  • 注册时间: 2016-02-14 20:13
  • 认证徽章:
文章分类

全部博文(24)

文章存档

2017年(5)

2016年(19)

我的朋友

分类: C/C++

2016-04-08 15:27:36


  1. /*
  2.  * 根据郝斌老师视频整理
  3.  * 编译环境:
  4.  * guo@linux:~$ gcc --version
  5.  * gcc (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4
  6.  * 递归 recursion
  7.  */
  8. #include <stdio.h>

  9. /*
  10.  * 函数名称:Factorial。
  11.  * = n * (n-1)!
  12.  * 输入参数:n
  13.  * 输出参数:n的阶乘。
  14.  */
  15. long Factorial(long n)
  16. {
  17.     if (1==n)
  18.         return 1;
  19.     else
  20.         return (n*Factorial(n-1));
  21. }

  22. /*
  23.  * 函数名称:Sum。
  24.  * 函数说明:计算1到n的和。
  25.  * 输入参数:n
  26.  * 输出参数:1到n的和。
  27.  */
  28. long Sum(long n)
  29. {
  30.     if (1==n)
  31.         return 1;
  32.     else
  33.         return (n + Sum(n-1));
  34. }

  35. /*
  36.  * 函数名称:Hanoi。汉诺塔
  37.  * 输入参数:n一共有n个盘子;A,B,C代表3根柱子。
  38.  * 输出参数:无。
  39.  * 函数说明:将n个盘子从A柱子移动到C柱子。具体说明可上网搜索。
  40.  * 假设n=1,直接将盘子从A移动到C。
  41.  * 假设n=2,假设大盘子为2,小盘子为1。
  42.  * 将1从A移动到B,将2从A移动到C,将1从B移动到C。
  43.  * 假设n=3,将1从A移动到C,2从A移动到B,1从C移动到B,3从A移动到C,1从B移动到A,
  44.  * 2从B移动到C,1从A移动到C。
  45.  * 总结:如果有n个盘子
  46.  * 1. 先将(n-1)个盘子从A借助于C移动到B
  47.  * 2. 再将第n个盘子从A移动到C
  48.  * 3. 最后将(n-1)个盘子从B借助于A移动到C
  49.  */
  50. void Hanoi(int n, char A, char B, char C)
  51. {
  52.     if (1==n)
  53.     {
  54.         printf("将编号为%d的盘子从%c移动到%c.\n", n, A, C);
  55.     }
  56.     else
  57.     {
  58.         Hanoi(n-1, A, C, B);
  59.         printf("将编号为%d的盘子从%c移动到%c.\n", n, A, C);
  60.         Hanoi(n-1, B, A, C);
  61.     }
  62. }

  63. int main(void)
  64. {
  65.     long i;
  66.     int j;
  67.     
  68.     i = 3;
  69.     printf("%ld的阶乘是%ld.\n", i, Factorial(i));

  70.     i = 100;
  71.     printf("1+...+%ld的和是%ld.\n", i, Sum(i));

  72.     j = 3;
  73.     Hanoi(j, 'A', 'B', 'C');

  74.     return 0;
  75. }

阅读(606) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册