漢諾塔的解法在於將問題分解
可以說漢諾塔只有三步
**寫過程
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.任何時刻都不能將乙個較...