首先遞迴是一種解決問題的方法,其精髓在於將問題分解為規模更小的相同問題。我們將問題持續分解,知道問題規模小到可以用非常簡單直接的方式來解決。遞迴的問題分解方式十分獨特,其演算法方面的明顯特徵就是:在演算法流程中呼叫自身
a、遞迴演算法必須有乙個基本結束條件(即最小規模問題的直接解決)
b、遞迴演算法必須能改變狀態(向基本結束條件演講即見效問題規模)
c、遞迴演算法必須呼叫自身(解決見笑了規模的相同問題)
----列表求和問題
def
sum(mylist):if
len(mylist)==1
:#遞迴結束條件,如果數列最後只剩下乙個數就返回這個列表的第乙個數(也就是這個數)
return mylist[0]
else
:return mylist[0]
+sum(mylist[1:
])#將列表求和問題轉化為第乙個數和剩下數的和的問題,從而不斷呼叫自身實現遞迴求和
if __name__ ==
'__main__'
:print
(sum([1
,3,5
,7,9]))
----整數轉換為任意進製問題
上圖為轉換過程。比如我們將整數轉化為十進位制數(**可以實現整數轉化為任意進製,這裡只是舉例)我們將需要轉換的整數不斷地整除10並且每次保留整數和10的餘數,直到最後數字小於十,符合遞迴結束的條件。當然我們這裡還要認為的建立乙個字串用來保留。具體**如下
def
zhuanhuan
(num,base)
: mystring=
"0123456789abcdef"
if num
return mystring[num]
else
:return zhuanhuan(num//base,base)
+mystring[num%base]
if __name__ ==
'__main__'
:print
(zhuanhuan(
100,16)
)
----利用遞迴畫樹葉
import turtle
deftree
(len):
iflen
>5:
#遞迴結束條件,樹幹太短就不畫
turtle.forward(
len)
#畫樹幹
turtle.right(20)
#右轉20度
tree(
len-15)
#遞迴呼叫畫右邊的小樹,樹幹-15
turtle.left(40)
#向左回40度,即向左傾斜20度
tree(
len-15)
#遞迴呼叫,花左邊的小樹,樹幹-15
turtle.right(20)
#回正 turtle.backward(
len)
#海龜退回原位
if __name__ ==
'__main__'
: turtle.left(90)
turtle.penup(
) turtle.backward(
300)
turtle.pendown(
) turtle.pensize(2)
turtle.pencolor(
"green"
) tree(
125)
turtle.hideturtle(
) turtle.done(
)
效果如上所示
----謝爾賓斯三角形的遞迴應用
–漢諾塔問題
def
han_nuo_ta_1
(height,frompole,withpole,topole)
:if height>=1:
han_nuo_ta_1(height-
1,frompole,withpole,topole)
han_nuo_ta_2(height,frompole,topole)
han_nuo_ta_1(height-
1,withpole,frompole,topole)
defhan_nuo_ta_2
(disk,frompole,topole)
:print
("moving disk[{}] from {} to {}"
.format
(disk,frompole,topole)
)if __name__ ==
'__main__'
: han_nuo_ta_1(10,
"#1"
,"#2"
,"#3"
)
思路:首先將上層n-1個碟片的碟片塔,從開始柱,經由目標柱,移動到中間柱;然後將第n個(最大的碟片)從開始柱,移動到目標柱;最後將放置在中間柱的n-1個碟片的碟片塔,由開始柱,移動到目標柱 遞迴例項詳解
c通過執行時堆疊支援遞迴函式的實現。遞迴函式就是直接或間接呼叫自身的函式。許多教科書都把計算機階乘和菲波那契數列用來說明遞迴,非常不幸我們可愛的著名的老潭老師的 c語言程式設計 一書中就是從階乘的計算開始的函式遞迴。導致讀過這本經書的同學們,看到階乘計算第乙個想法就是遞迴。但是在階乘的計算裡,遞迴並...
python遞迴函式例項 python遞迴函式
python遞迴函式 什麼是遞迴?遞迴,就是在函式執行中自己呼叫自己 示例 def recursion n 定義遞迴函式 print n 列印n recursion n 1 在函式的執行種呼叫遞迴 recursion 1 呼叫函式 這個函式在不斷的自己呼叫自己,每次呼叫n 1,看下執行結果 998t...
python遞迴實現 遞迴演算法 python實現
在函式的定義中對這個函式自身的呼叫,就是遞迴。遞迴結構中,遞迴的部分必須比原來的整體簡單,才有可能到達某種終結點 出口 而且必須存在非遞迴的基本結構構成的部分,否則會無限遞迴。學習目標 程式設計實現斐波那契數列求值 f n f n 1 f n 2 程式設計實現求階乘 n 程式設計實現一組資料集合的全...