码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构预备知识——递归

时间:2015-05-17 21:39:51      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

          递归就是函数间接的调用自己, 它的实现基于函数参数传递的栈机制, 每次递归递归调用都会多一个栈帧——和简单的函数调用并没有什么不同 (都是使用了调用栈)。调用自己和调用其它函数并没有本质的区别, 都是建立新栈帧, 传递参数并修改当前代码行。在函数体执行完毕后删除栈帧, 处理返回值并修改当前代码行。

          递归在数据结构中占有很重要的,特别是, 树和图的建立, 和遍历。 使用递归能使代码更清晰, 更简洁, 但是调试时会很麻烦, 所以, 对于递归要熟练应用且小心应用。

 

下面是几个简单的应用举例:

<1>. 汉诺塔问题, 有三个钢针, A, B, C, A 上有n个圆盘, 大的在下面, 小的在上面, 你可以借借助B针, 把A针上的圆盘移到C盘上,(任何时候较大盘都不能放在较小盘上), 对于一个不太大的n(据说n等于64时, 每秒移动一次, 宇宙会在完成的那一瞬间毁灭, 嘿嘿!!), 请给出移动次数最少的解决方案!

 

技术分享
 1 #include<stdio.h>
 2 
 3 void Move(int n, char A, char B)
 4 {
 5     printf("Move disk %d from %c to %c\n", n, A, B);
 6 } 
 7 
 8 void hanoi(int n, char A, char B, char C)
 9 {
10     if(n==1) Move(1, A, C);
11     else
12     {
13         hanoi(n-1, A, C, B);
14         Move(n, A, C);
15         hanoi(n-1, B, A, C);
16     }
17 }
18 
19 int main()
20 {
21     int n;
22     while(scanf("%d", &n)!=EOF, n)
23     {
24         hanoi(n, A, B, C);
25     }
26     return 0;
27 }
View Code

 

数据结构预备知识——递归

标签:

原文地址:http://www.cnblogs.com/acm1314/p/4510323.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!