漢諾塔 小青蛙

2022-02-28 06:21:47 字數 1971 閱讀 1721

漢諾塔的解法在於將問題分解

可以說漢諾塔只有三步

**寫過程

def hanoi(n, a, b, c):

""":param n: 問題規模

:param a: 起始盤子

:param b: 路過盤子

:param c: 目標盤子

:return:

"""if n > 0:

hanoi(n-1, a, c, b) # 開啟冰箱門,把b當做目標盤子

print("%s->%s" % (a, c)) # 把大象裝進冰箱,進入冰箱的大象肯定是從上向下的

hanoi(n-1, b, a, c) # 關上冰箱門,b是起始盤子

**寫次數

def func(n):

if n<=1:

return n

else:

return func(n-1)+1+func(n-1)

算數寫次數

總次數:2**n-1
本質:問題的拆解+累加

青蛙跳台階演算法,每次可以跳1級或兩級,請問有n級台階,有多少種跳法

用fib(n)表示青蛙跳上n階台階的跳法數,青蛙一次性跳上n階台階的跳法數1(n階跳),設定fib(0) = 1;

當n = 1 時, 只有一種跳法,即1階跳:fib(1) = 1;

當n = 2 時, 有兩種跳的方式,一階跳和二階跳:fib(2) = fib(1) + fib(0) = 2;

當n = 3 時,有三種跳的方式,第一次跳出一階後,後面還有fib(3-1)中跳法; 第一次跳出二階後,後面還有fib(3-2)中跳法;第一次跳出三階後,後面還有fib(3-3)中跳法

fib(3) = fib(2) + fib(1)+fib(0)=4;

當n = n 時,共有n種跳的方式,第一次跳出一階後,後面還有fib(n-1)中跳法; 第一次跳出二階後,後面還有fib(n-2)中跳法..........................第一次跳出n階後, 後面還有 fib(n-n)中跳法.

fib(n) = fib(n-1)+fib(n-2)+fib(n-3)+..........+fib(n-n)=fib(0)+fib(1)+fib(2)+.......+fib(n-1)

又因為fib(n-1)=fib(0)+fib(1)+fib(2)+.......+fib(n-2)

兩式相減得:fib(n)-fib(n-1)=fib(n-1) *****》 fib(n) = 2*fib(n-1) n >= 2

def climbstairs(n):

if n==1:

return 1

elif n==2:

return 2

else:

return self.climbstairs(n-1)+self.climbstairs(n-2)

使用迴圈

def climbstairs(n):

if n==1 or n==2:

return n

a=1;b=2;c=3

for i in range(3,n+1):

c=a+b;a=b;b=c

return c

python 漢諾塔 Python漢諾塔

import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...

漢諾塔合集之漢諾塔3

漢諾塔3 步驟分析 1.當只有乙個圓盤時,要從a到b再到c 2.同樣擴充套件經典漢諾塔問題來看,先把a柱上 n 1 個圓盤,經b移動到c 3.把最後乙個圓盤從a移動到b 4.把c柱上的 n 1 個圓盤,經b移動 移回 到a 5.把b上的最後乙個圓盤從b移到c 6.最後把a上的 n 1 個圓盤經過b移...

漢諾塔問題

問題 假設有3個分別命名為x,y,z的寶塔,在塔座x上插有n個直徑大小各不相同,從小到大編號為1,2,3。n的圓盤。現要求將x軸上的n個圓盤移至塔座z上 並仍然按同樣的順序疊排,圓盤移動時必須遵循下列規則 1.每次只能移動乙個圓盤 2.圓盤可以插在x,y和z中的任一塔座上 3.任何時刻都不能將乙個較...