1.汉诺塔是由三根杆子A,B,C组成的。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。问:如何移?最少要移动多少次?汉诺塔是根据一个传说形成的一个问题:
有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
每次只能移动一个圆盘;
大盘不能叠在小盘上面。
提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。
问:如何移?最少要移动多少次?
1 class Program 2 { 3 static int i = 1; 4 static void move(int n, char from, char to) //将编号为n的盘子由from移动到to 5 { 6 Console.WriteLine("第{0}步:将{1}号盘子{2}---->{3} ", i++, n, from, to); 7 } 8 static void hanoi(int n, char from, char denpend_on, char to)//将n个盘子由初始塔移动到目标塔(利用借用塔) 9 { 10 if (n == 1) 11 move(1, from, to);//只有一个盘子是直接将初塔上的盘子移动到目的地 12 else 13 { 14 hanoi(n - 1, from, to, denpend_on);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上 15 move(n, from, to); //将剩下的一个盘子移动到目的塔上 16 hanoi(n - 1, denpend_on, from, to);//最后将借用塔上的n-1个盘子移动到目的塔上 17 } 18 } 19 static void Main(string[] args) 20 { 21 Console.Write("请输入盘子的个数: "); 22 int n; 23 n = Convert.ToInt32(Console.ReadLine()); 24 char x = 'A', y = 'B', z = 'C'; 25 Console.Write("盘子移动情况如下: "); 26 hanoi(n, x, y, z); 27 28 29 }
运行结果举例:
2.猴子吃桃的问题
1 static void Main(string[] args) 2 { 3 int a=Taozi(1); 4 Console.WriteLine(a); 5 6 } 7 static int Taozi(int day) 8 { 9 if (day == 7) 10 { 11 return 1; 12 } 13 int n = (Taozi(day + 1) + 1) * 2; 14 return n; 15 16 }
3.做梦
1 static void Main(string[] args) 2 { 3 //递归函数 4 //做梦 5 Test(1); 6 Console.WriteLine(); 7 } 8 static void Test(int n) 9 { 10 if (n>10) 11 { 12 return; 13 } 14 Console.WriteLine("这是第{0}次在做梦",n); 15 Test(n+1); 16 Console.WriteLine("第{0}次梦醒了",n); 17 }
运行结果:
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++; }