1.如何理解遞歸與分治呢?其主要的思想在於又宏觀到微觀,由整體到個體。
2.不多說,上代碼
#include <iostream>
using namespace std;
//把A上的盤子放到C上
void Hanoi(int n,char A,char B,char C){
if(n==1){
cout<<A<<"-->"<<C<<endl;
}
else{
Hanoi(n-1,A,C,B);//把A上的n-1個盤子通過C放到B上
cout<<A<<"-->"<<C<<endl;//把A最下面的盤子放到C上
Hanoi(n-1,B,A,C);//再把n-1個B上的盤子通過A放到C上
}
}
int main(){
Hanoi(3,'A','B','C');
return 0;
}
3.首先,遞歸最重要的是出口,如上述代碼段的
if(n==1){
cout<<A<<"-->"<<C<<endl;//即當盤子數目爲1的時候,直接把A盤子放到C盤子
}
而當盤子數目爲n時候怎麼辦呢?那就把上面的n-1個盤子看成一個盤子,變成兩個盤子的問題,那麼就好解決了,直接調用Hanoi(n-1,A,C,B)把上面的n-1個盤子先放到C再放到B上,之後還剩下第N個盤子怎麼辦呢,把第N個盤子放到C,然後再把B上面的N-1個盤子放到C上面就行了。所以,主要思想是整體分析問題,因爲整體裏面的小問題都是相同的子問題,沒必要深究,當然,遞歸最最重要的是出口,只要出口寫好了,基本上遞歸程序就完成了!