hanoi塔問題是比較經典的遞迴問題,很多學生從大一開始學習c語言遞迴時都或許會碰到這個問題,但很多同學一開始都是一知半解的,現在我來領大家一起重新學習一下hanoi問題,讓我們一起對遞迴函式有更好的理解。
設n為hanoi塔的盤子的數量。a,b,c是三根支柱,hanoi()函式要求將所有的盤從a借助b移動到c。
當n為1時,那麼就是直接從a柱移動到c柱。
當n為2時,那麼就是從a移到b,然後把另乙個盤子再從a移到c,最後把b上的盤子移到c上。
當為n時,就是把a上面的n-1個盤子從a借助c移動到b上,然後把a上的第n個盤子從a移動到c上。最後再把b上的n-1個盤子從b借助a移動到c上。如此遞迴求解。
#include
using
namespace std;
void
hanoi
(int n,
char a,
char b,
char c,
long
long
& sum)
//把n個盤子從a借助b移到c上
hanoi
(n-1
,a,c,b,sum)
;//把n-1個盤子從a借助c移動到b上
sum++
; cout<<
"第"<
"步"<
"->"
<
hanoi
(n-1
,b,a,c,sum)
;//把n-1個盤子從b借助a移動到c上
遞迴 Hanoi塔問題
題目 hanoi塔問題,遊戲規則 1 每次只能移動乙隻圓盤 2 任何時候大圓盤不能壓在小圓盤之上 3 任何時候都不允許將圓盤放在三根立軸之外的任何地方。分析 遞迴的 base case 當只有乙個圓盤的時候,直接從圓盤所在的立軸移動到目標立軸,即完成。遞迴的 recursion rule 如圖所示,...
漢諾塔問題 hanoi(遞迴)
漢諾塔問題 hanoi 現有abc三個柱子,a中有n個盤 上小下大 移動到c上,要求全程上小下大 演算法 遞迴,把1 n 1個盤當作乙個整體 include 函式宣告 函式功能 把n個盤 從a 借助b,移到c hanoi int n,char x,char y,char z 函式功能 把乙個盤子x ...
hanoi塔問題的遞迴實現
一 背景故事 二 問題描述 假設有x,y,z三座塔座。在塔座x上有n個直徑各不相同 依次從小到大的編號為1,2.n的圓盤。現要求將x座上的盤子移動到z上,移動要求如下 1 一次只能移動乙個盤子。2 盤子只能插在x,y,z的某個塔座上。3 任何時刻不能將較大的盤子壓在較小的盤子上。如何移動盤子呢?當只...