- 3
- 0
- 约2.8千字
- 约 2页
- 2023-12-16 发布于中国
- 举报
递归函数的练习,汉诺塔问题的程序实现(递归)
1.汉诺塔是由三根杆⼦A,B,C组成的。A杆上N个(N1)穿孔圆盘,盘的尺⼨由下到上依次变⼩。要求按下列规则将所有圆盘移⾄C杆:
每次只能移动⼀个圆盘;⼤盘不能叠在⼩盘上⾯。提⽰:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述
两条规则。问:如何移?最少要移动多少次?汉诺塔是根据⼀个传说形成的⼀个问题:
有三根杆⼦A,B,C。A杆上N个(N1)穿孔圆盘,盘的尺⼨由下到上依次变⼩。要求按下列规则将所有圆盘移⾄C杆:
每次只能移动⼀个圆盘;
⼤盘不能叠在⼩盘上⾯。
提⽰:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。
问:如何移?最少要移动多少次?
1classProgram
2{
3staticinti=1;
4staticvoimove(intn,charfrom,charto)//将编号为n的盘⼦由from移动到to
5{
6Console.WriteLine(第{0}步:将{1}号盘⼦{2}{3}\n,i++,n,from,to);
7}
8staticvoihanoi(intn,charfrom,chardenpend_on,charto)//将n个盘⼦由初始塔移动到⽬标塔(利⽤借⽤塔)
9{
10if(n==1)
11move(1,from,to);//只有⼀个盘⼦是直接将初塔上的盘⼦移动到⽬的地
12else
13{
14hanoi(n-1,from,to,denpend_on);//先将初始塔的前n-1个盘⼦借助⽬的塔移动到借⽤塔上
15move(n,from,to);//将剩下的⼀个盘⼦移动到⽬的塔上
16hanoi(n-1,denpend_on,from,to);//最后将借⽤塔上的n-1个盘⼦移动到⽬的塔上
17}
18}
19staticvoiMain(string[]args)
20{
21Console.Write(请输⼊盘⼦的个数:\n);
22intn;
23n=Convert.ToInt32(Console.ReadLine());
24charx=A,y=B,z=C;
25Console.Write(盘⼦移动情况如下:\n);
26hanoi(n,x,y,z);
27
28
29}
运⾏结果举例:
2.猴⼦吃桃的问题
1staticvoiMain(string[]args)
2{
3inta=Taozi(1);
4Console.WriteLine(a);
5
6}
7staticintTaozi(intday)
8{
9if(day==7)
10{
11return1;
12}
13intn=(Taozi(day+1)+1)*2;
14returnn;
15
16}
3.做梦
1staticvoiMain(string[]args)
2{
3//递归函数
4//做梦
5
原创力文档

文档评论(0)