C 3個漢諾塔遞迴問題

2021-10-14 03:45:27 字數 996 閱讀 2990

移動次數2^n-1

hannoni(int n,char a,char b,char c)把n個盤子借助b,從a移動到c

move(int n,char a,char c)把第n個盤子,從a移動到c

#include

#include

using

namespace std;

//漢諾塔問題a--->c

//2^n-1次移動次數

//把第n個盤子從a移動到c

void

move

(int n,

char a,

char c)

//把n個盤子a借助b移到c

void

hannoni

(int n,

char a,

char b,

char c)

}int

main()

要點:a—>c

1.當n==1時直接從a移動到c

2.當n>1時,

先把n-1個盤子借助c,從a移動到b

再把第n個盤子從a移動到c

最後,借助a,把n-1個盤子從b移動到c

要點:a—>c

1.當n==1時直接從a移動到c 移動一次

2.當n>1時,

先把n-1個盤子借助c,從a移動到b 移動n-1次

再把第n個盤子從a移動到c 移動一次

最後,借助a,把n-1個盤子從b移動到c 移動n-1次

所以,n=1,t(n)=1

n>1,t(n)=2t(n-1)+1

**示例

#include

#include

using

namespace std;

intcount

(int n)

intmain()

漢諾塔問題(遞迴)

題目描述 對於傳統的漢諾塔遊戲我們做乙個拓展,我們有從大到小放置的n個圓盤,開始時所有圓盤都放在左邊的柱子上,按照漢諾塔遊戲的要求我們要把所有的圓盤都移到右邊的柱子上,請實現乙個函式列印最優移動軌跡。給定乙個int n,表示有n個圓盤。請返回乙個string陣列,其中的元素依次為每次移動的描述。描述...

漢諾塔問題(遞迴)

問題 漢諾塔問題 解法 遞迴求解 思路 先把n 1從a移動b 在把第n個從a移到c 使用遞迴使得 變得簡單 複雜度 2的n次方 1 includeint step 1 void hanoi int level,char a,char b,char c 1 當盤子數大於1時,先把n 1個從a借助c移動...

漢諾塔問題(遞迴)

漢諾塔 在印度,有這麼乙個古老的傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,有三根柱子。印度教的主神梵天在創造世界的時候,在其中一根柱子上從下到上地穿好了由大到小的64片金盤,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金盤 一次只移動一片,不管在哪根柱子上,小片必須在...