1. 程式人生 > >C語言漢諾塔--遞迴演算法

C語言漢諾塔--遞迴演算法

問題描述:

  有一個梵塔,塔內有三個座A、B、C,A座上有諾幹個盤子,盤子大小不等,大的在下,小的在上(如圖)。

把這些個盤子從A座移到C座,中間可以借用B座但每次只能允許移動一個盤子,並且在移動過程中,3個座上的盤

子始終保持大盤在下,小盤在上。

描述簡化:把A柱上的n個盤子移動到C柱,其中可以借用B柱。

大一學習了C語言,當時不是很理解遞迴,這個學期在《演算法設計與分析》課程上再次學習了遞迴,現在算是理解了,

1 #include<stdio.h>
 2 
 3 void move(int n,char a,char b,char c)
 4 {
 5     if
(n==1) 6 printf("\t%c->%c\n",a,c); //當n只有1個的時候直接從a移動到c 7 else 8 { 9 move(n-1,a,c,b); //第n-1個要從a通過c移動到b 10 printf("\t%c->%c\n",a,c); 11 move(n-1,b,a,c); //n-1個移動過來之後,b通過a移動到c 12 } 13 } 14 15 main() 16 { 17 int n; 18 printf
("請輸入要移動的塊數:"); 19 scanf("%d",&n); 20 move(n,'a','b','c'); 21 } 22 /* 23 請輸入要移動的塊數:4 24 a->b 25 a->c 26 b->c 27 a->b 28 c->a 29 c->b 30 a->b 31 a->c 32 b->c 33 b->a 34 c->a 35 b->c 36 a->b 37 a->c
38 b->c 39 Press any key to continue . . .*/