C語言漢諾塔--遞迴演算法
阿新 • • 發佈:2019-01-05
問題描述:
有一個梵塔,塔內有三個座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->c38 ┊ b->c 39 Press any key to continue . . .*/