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}\n", 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("請輸入盤子的個數:\n"); 22 int n; 23 n = Convert.ToInt32(Console.ReadLine()); 24 char x = 'A', y = 'B', z = 'C'; 25 Console.Write("盤子移動情況如下:\n"); 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++; }