漢諾塔遞迴及非遞迴解法

2021-07-05 14:29:58 字數 523 閱讀 2495

1. 經典遞迴解法

#include void mov(char a, char b)

void recursive_hanoi(int n, char a, char b, char c)

int main()

2. 非遞迴解法

從漢諾塔的遞迴解法可以看出,它跟二叉樹中序遍歷遞迴解法是乙個道理。既然二叉樹非遞迴解法能寫出來,那麼漢諾塔非遞迴解法也不難寫出來。

#include #include struct hanoinode

bool is_null()

hanoinode left()

hanoinode right()

void mov() const

};void nonrecursive_hanoi(int n, char a, char b, char c)

else

}}int main()

漢諾塔遞迴解法

解題思路 1 當只有乙個圓盤時,只需將其從 塔a移至目標塔c 不需要借助輔助塔b 2 當有兩個圓盤時,需要先把1號圓盤移至輔助塔b,將2號圓盤移至目標塔c,再將輔助塔b上的1號圓盤移至目標塔c即可。3 當有三個圓盤時,需要先把1號 2號圓盤移至輔助塔b,將3號圓盤移至目標塔c,再將輔助塔b上的1號 ...

漢諾塔問題的遞迴解法與非遞迴解法(堆疊解法)

1.遞迴演算法,三步 移動n 1到b,移動1到c,移動n 1到c。includeusing namespace std int j 1 void move char a,char c void hanio int n,char a,char b,char c hanio n 1,a,c,b move...

漢諾塔的遞迴解法

遇到這題,就覺得我的理解能力和表達能力不行,用了好長時間把這題弄懂,然而又不知道怎麼用語言表述。要先找到 n 1的是基例,當只有一塊時,直接從a移動到c就完成了 然後再解決n的問題,都可以看成 先把 a柱 n 1 個盤子,先從a 移動到b,再將a最後乙個盤子從a 移動到c,最後將n 1個盤子從b移動...