漢諾塔(hanoi)詳解

2021-08-08 17:46:05 字數 839 閱讀 4467

漢諾塔問題是演算法中的經典中的經典,是遞迴思想的入門問題。一般是這樣描述:左中右三根柱子,左邊柱子上有n個圓盤 每個圓盤從下至上從大到下排列,移動過程中小的圓盤不能放在大圓盤下面,要求將左邊柱子上的圓盤全部移動到右邊圓盤上,可以借助中間的圓盤。返回其時間複雜度並且列印每乙個步驟。

分析:

首先用特例來初步了解過程即n=2的時候 左邊有兩個圓盤大圓盤編號為做左1放在下面,小圓盤編號為左2放在上面,移動過程為:

1,左1 從左到中

2,左2 從左到右

3,左1 從中到右

那麼當左邊有n個圓盤的時候步驟為:

1,左1—(n-1) 從左到中

2,左n 從左到右

3,左1—(n-1)從中到右

n個圓盤需要移動的步驟數推到過程:

1—(n-1)從左到中 和從中到右 所需的步數是一樣的即f(n-1)步

所以:總步數就是三個移動過程步數相加

f(n)=f(n-1)+1+f(n-1)

推理:

f(n)+1=2(f(n-1)+1)

且f(1) = 2 這是等比數列 用公式得:

f(n)=2^n - 1;

所以時間複雜度為o(2^n)

public

class hanoi

public

static

void

hanoi(int n)

}public

static

void

func(int n ,string from,string mid,string to)else

}}

漢諾塔問題(Hanoi塔)

1.將from柱最上面的movesum 1個圓盤移動到by柱 借助to柱 2.將from柱上剩下的那1個圓盤直接移動到to柱 3.將by柱上的movesum 1個圓盤移動到to柱 借助from柱 int sumofplates 4 總的盤子數目 int sum 3 初始時各柱子上盤子數目 enum ...

漢諾塔問題 Hanoi

描述 一 漢諾塔問題 問 如何移?最少要移動多少次?漢諾塔示意圖如下 三個盤的移動 二 故事由來 法國數學家愛德華 盧卡斯曾編寫過乙個印度的古老傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片...

漢諾塔問題 hanoi(遞迴)

漢諾塔問題 hanoi 現有abc三個柱子,a中有n個盤 上小下大 移動到c上,要求全程上小下大 演算法 遞迴,把1 n 1個盤當作乙個整體 include 函式宣告 函式功能 把n個盤 從a 借助b,移到c hanoi int n,char x,char y,char z 函式功能 把乙個盤子x ...