遞迴這個磨機的小妖精

2021-09-02 23:59:49 字數 1563 閱讀 6012

費了好大的勁才對遞迴演算法有了點淺顯的理解,在這與大家分享一下典型例子的**。

經典迴圈演算法:

for i in range(1,10):

for j in range(1,i+1):

result = i * j

print("%s * %s = %s" %(j,i,result),end='\t')

print()

遞迴演算法實現:

def

mul(i,j):

if i >= 1:

if j <= i:

result = i * j

print("%s * %s = %s\t" %(j,i,result),end='')

j += 1

# 設定遞迴退出界限條件,這很重要

if j > i:

j = 1

i -= 1

print()

mul(i,j)

if __name__ == "__main__":

# 這裡的輸出會是倒序排列的,大家可以試一下修改傳遞的引數和判斷條件來實現正序排列

mul(9,1)

還有乙個理解遞迴演算法的經典案例,漢諾塔,這裡的**參考fishc論壇的小甲魚

漢諾塔:漢諾塔(又稱河內塔)問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片**圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。

其實演算法非常簡單。當盤子的個數為n時,移動的次數應等於2^n – 1(有興趣的可以自己證明試試看)。後來一位美國學者發現一種出人意料的簡單方法,只要輪流進行兩步操作就可以了。首先把三根柱子按順序排成品字型,把所有的圓盤按從大到小的順序放在柱子a上,根據圓盤的數量確定柱子的排放順序:若n為偶數,按順時針方向依次擺放 a b c;若n為奇數,按順時針方向依次擺放 a c b。

def

hanoi

(n,x,y,z):

if n == 1:

print(x+str(n)+' ---> '+z+str(n))

else:

hanoi(n-1,x,z,y) # 將前n-1個盤子從x移動到y上

print(x+str(n)+' ---> '+z+str(n)) # 將最底下的最後乙個盤子從x移動到z上

hanoi(n-1,y,x,z) # 將y上的n-1個盤子移動到z上

n = int(input("please input the number of towers:"))

hanoi(n,"x","y","z")

以上是python中的實現過程。

遞迴這個磨機的小妖精

費了好大的勁才對遞迴演算法有了點淺顯的理解,在這與大家分享一下典型例子的 經典迴圈演算法 for i in range 1,10 for j in range 1,i 1 result i j print s s s j,i,result end t print 遞迴演算法實現 def mul i,...

張勛說 棒磨機鋼棒直徑的配置(熱處理調質耐磨鋼棒)

最近有朋友問到什麼樣的棒磨機應該配置什麼直徑的鋼棒,即配磨。其實這是乙個挺複雜的問題,不只與磨機有關,更與工況 進料粒度 出料細度 礦石型別硬度 筒體有效內徑和長度 介質充填率和堆密度等 有莫大的關係,有給料粒度相關法 質量直徑等比法 等表面積法 質量表面積等比法 等個數法等,需要在顆粒粒度最大消失...

華東師範考研機試 慢速的遞迴

因為要準備複試機試就每天刷兩道題 大家應該對遞迴不陌生,有很多問題使用遞迴解決會又方便又簡潔。我們現在定義這樣乙個遞迴函式w a,b,c 如果 a 0 或 b 0 或 c 0,那麼 w a,b,c 的值為1 如果 a 20 或 b 20 或 c 20,則 w a,b,c 的值為 w 20,20,20...