1. 程式人生 > >漢諾塔問題c++

漢諾塔問題c++

大致題意:
有A、B、C三個盤子用來盛餅,餅的個頭有大有小,沒有大小完全相同的,餅在盤子中必須大個的在下面,小個的放在上面。現在 A 盤中放著 n 張薄餅,需要藉助 B 盤放在 C 盤中

漢諾塔問題步驟:(把A,藉助B,到C)
1)如果只有一個,直接A->C。
2)如果不止一個,將n-1個藉助C,從A->B。
3)再將第n個,從A->C。
4)最後將B中的n-1個,藉助A,從B->C。

程式碼如下:

#include <iostream>
using namespace std;
void hanoi(int n,char source,
char relay,char destination) { if(n==1) cout<<source<<"->"<<destination<<endl; else { hanoi(n-1,source,destination,relay); cout<<source<<"->"<<destination<<endl; hanoi(n-1,relay,source,destination); } } int main
() { int n; cin>>n; cout<<"remove:"<<endl; hanoi(n,'A','B','C'); return 0; }

來總結一下:
遞迴演算法不用考慮特別多,當數特別大的時候也考慮不過來,我感覺只需要知道,它的下一步怎麼走就行了,沒有必要層層深入的去考慮走到了哪裡。