国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

淺析python遞歸函數和河內塔問題

2019-11-25 16:14:39
字體:
來源:轉載
供稿:網友

關于遞歸函數:

  函數內部調用自身的函數。

以n階乘為例:

  f(n) = n ! = 1 x 2 x 3 x 4 x...x(n-1)x(n) = n x (n-1) !

def factorial(n):   if n==1:     return 1   return n * f(n-1)

//調用過程如下:

>>f(5)>>5 * f(4)>>5 * 4 * f(3)>>5 * 4 * 3 * f(2)>>5 * 4 * 3 * 2 * f(1)>>5 * 4 * 3 * 2 * 1>>120

從上面的例子可以直觀得看到遞歸函數在不斷的調用自己的函數,直到n==1(函數出口)。

關于河內塔:

規則:

  1. 三根柱子,A,B, C

  2. A 柱子上的盤子從小到大 排列,最上面的是最小的,最下面的是最大的。

  3. 將A上的盤子移動到C上,移動過程中始終保持,最大的在下面,最小的在上面。

假設 A 柱子上有一個盤子,可以直接從A移動到C完成:

  A --> C

假設 A 柱子上有兩個盤子,需要借助B,移動到C:

A --> B

A --> C

B --> C

將A 最上面的盤(2-1)移動到B,然后將A中剩下一塊盤移動到C,最后將B中的盤移動到C

假設 A 柱子上有三個盤子,需要借助B移動A 上面的兩個盤,然后將A剩下最大的盤移動到C,最后將B中的盤移動到C。

A --> C

A --> B

C --> B  //這三步將A上前兩個盤子移動到B

A --> C //這一步將A上最大的盤子移動到C

B --> A

B --> C

A --> C //后面這三步將B上的盤子移動到C

原理是將 A 上的(n-1) 塊盤移動到B,然后A中剩下的,也是最大的一塊盤移動到C,最后將B上(n-1)塊盤移動到C。

def Hanoi(n , a, b, c):  if n==1:    print (" Hanoi Tower move", a, "-->", c)    return  Hanoi(n-1, a, c, b)  Hanoi(1, a, b, c)  Hanoi(n-1, b, a, c)print (" When there is 1 ring on A")Hanoi(1, 'A', 'B', 'C')print (" When there are 2 rings on A")Hanoi(2, 'A', 'B', 'C')print (" When there are 3 rings on A")Hanoi(3, 'A', 'B', 'C')print(" When there are 4 rings on A")Hanoi(4, 'A', 'B', 'C')

以上所述是小編給大家介紹的python遞歸函數和河內塔問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙岩市| 崇信县| 郧西县| 赤壁市| 湛江市| 马龙县| 高安市| 吴桥县| 永康市| 汶上县| 南雄市| 淄博市| 定日县| 兴安县| 洞头县| 临泽县| 留坝县| 原阳县| 峡江县| 吴堡县| 阿克| 商河县| 赣榆县| 赤水市| 金塔县| 延寿县| 龙海市| 册亨县| 景宁| 土默特右旗| 桓台县| 昔阳县| 天祝| 西峡县| 阆中市| 贺兰县| 五台县| 新化县| 新化县| 承德县| 深水埗区|