python 遞迴之漢諾塔遊戲

2021-10-06 21:45:50 字數 1152 閱讀 1566

漢諾塔遊戲規則:遊戲裡有三根金剛石柱子,在a柱子上從下往上安從大到小順序摞著64片**圓盤。玩家需要做的是把圓盤從下面開始按大小順序重新擺放在c柱子上,利用b柱子作為過渡。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。

遊戲理解起來很簡單,我們小時候應該都玩過,那麼怎麼用程式來模擬這一過程呢?在這裡,我們可以用遞迴思想,問題將很容易得到解決。那麼什麼是遞迴思想,遞迴又應該如何使用呢?下面我將參照嵩天老師的遞迴函式課程來做一次粗略的介紹與總結。

一、什麼是遞迴?

遞迴就是在函式內部呼叫自身。

二、遞迴的基本條件

1.函式+分支結構

舉例:

def

func

(n):if:

***else

: ***

# -*- coding: utf-8 -*-

count =

0def

hanoi

(n,src,dst,mid)

:"""漢諾塔函式,將n個圓盤從源柱子通過中間柱子最後都搬去目的柱子"""

global count

if n ==1:

print

("{}:{}->{}"

.format

(n,src,dst)

)#將1個圓盤從源柱子拿到目的柱子去

count +=

1#完成一次搬運,計數+1

else

: hanoi(n-

1,src,mid,dst)

#將n-1個柱子從源柱子通過目的柱子的過渡,全部搬到中間柱子

print

("{}:{}->{}"

.format

(n,src,dst)

)#列印將第n個圓盤從源柱子拿到目的柱子

count +=

1 hanoi(n-

1,mid,dst,src)

#最後將n-1個柱子從源柱子通過中間柱子的過渡,全部搬到目的柱子

hanoi(5,

"a",

"b",

"c")

print

(count)

Python遞迴之漢諾塔

漢諾塔一般有兩種返回結果,一種是計算移動的次數,另一種是列印輸入移動的步驟。假設有a,b,c三個柱子,初始時盤子都在a柱子上,需要借助b做中轉站把所有盤子都移動到c上。1.計算移動的次數 首先定義乙個函式hantower n 用來計算移動的次數。如果n 1,直接從a移動到c,返回結果1 如果n 1,...

遞迴之 漢諾塔

遞迴思想的概念 即將乙個複雜問題分解成一系列小的問題,並且這些小問題都具有相同的情形。此時可運用遞迴的思想來解決更易於理解 但並不一定是效率最高的哦 遞迴演算法有三個關鍵點 1 了解題意是否適用遞迴來解決 2 有明確的終止條件 通常是分解出來的一系列小問題裡最簡單的那種情況 3 隨著遞迴演算法的演進...

遞迴之漢諾塔

漢諾塔 time limit 1000 ms memory limit 65536 kib submit statistic problem description 漢諾塔 又稱河內塔 問題是印度的乙個古老的傳說。開天闢地的神勃拉瑪在乙個廟裡留下了三根金剛石的棒a b和c,a上面套著n個圓的金片,最...