递归函数的练习,汉诺塔问题的程序实现(递归)
2016-04-26 19:01
519 查看
1.汉诺塔是由三根杆子A,B,C组成的。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。问:如何移?最少要移动多少次?汉诺塔是根据一个传说形成的一个问题:
有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
每次只能移动一个圆盘;
大盘不能叠在小盘上面。
提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。
问:如何移?最少要移动多少次?
运行结果举例:
2.猴子吃桃的问题
3.做梦
运行结果:
4.折纸问题:
有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
每次只能移动一个圆盘;
大盘不能叠在小盘上面。
提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。
问:如何移?最少要移动多少次?
class Program { static int i = 1; static void move(int n, char from, char to) //将编号为n的盘子由from移动到to { Console.WriteLine("第{0}步:将{1}号盘子{2}---->{3}\n", i++, n, from, to); } static void hanoi(int n, char from, char denpend_on, char to)//将n个盘子由初始塔移动到目标塔(利用借用塔) { if (n == 1) move(1, from, to);//只有一个盘子是直接将初塔上的盘子移动到目的地 else { hanoi(n - 1, from, to, denpend_on);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上 move(n, from, to); //将剩下的一个盘子移动到目的塔上 hanoi(n - 1, denpend_on, from, to);//最后将借用塔上的n-1个盘子移动到目的塔上 } } static void Main(string[] args) { Console.Write("请输入盘子的个数:\n"); int n; n = Convert.ToInt32(Console.ReadLine()); char x = 'A', y = 'B', z = 'C'; Console.Write("盘子移动情况如下:\n"); hanoi(n, x, y, z); }
运行结果举例:
2.猴子吃桃的问题
static void Main(string[] args) { int a=Taozi(1); Console.WriteLine(a); } static int Taozi(int day) { if (day == 7) { return 1; } int n = (Taozi(day + 1) + 1) * 2; return n; }
3.做梦
static void Main(string[] args) { //递归函数 //做梦 Test(1); Console.WriteLine(); } static void Test(int n) { if (n>10) { return; } Console.WriteLine("这是第{0}次在做梦",n); Test(n+1); Console.WriteLine("第{0}次梦醒了",n); }
运行结果:
4.折纸问题:
static void Main5(string[] args) { //折纸 double houdu = 0.00008; Zhezhi(houdu); Console.WriteLine(n); } static void Zhezhi(double h) { if (h>8848) { return ; } Zhezhi(h*2); n++; }
相关文章推荐
- go 简介学习
- 凯撒密码
- 包
- iOS基础:获取资源文件的方法
- POJ 【3414】 Pots
- CADisplayLink(主) 和 NSTimer
- Spring是什么
- 数据库中查找某个字段中特殊字符方法
- 在Apache中配置php环境
- 数组
- 在Mac中如何显示和隐藏文件
- MySQL基础
- 谈一下我的博客
- Javascript 使用Hashmap/Dict 和陷阱
- gprof的性能优化实践
- form表单提交两种方式
- adapter.notifyDataSetChanged()刷新不起作用
- 【Android】【UI】ListView中Button点击事件被拦截的解决方案
- 【GDOI2016模拟4.22】无界单词
- 防止重复提交