遞迴函式
了解什麼是遞迴 : 在函式中呼叫自身函式
最大遞迴深度預設是997/998 —— 是python從記憶體角度出發做得限制
初識遞迴 ——
演算法 —— 二分查詢演算法
**選單 —— 遞迴實現
如果遞迴次數太多,就不適合使用遞迴來解決問題。
def
story()
:print
('從前有座山'
) story(
)story(
)
函式體中呼叫函式
遞迴的缺點:佔記憶體
遞迴的優點:**變簡單
什麼叫演算法
計算的方法 : 人腦複雜 計算機簡單
我們學習的演算法 都是過去時
了解基礎的演算法 才能創造出更好的演算法
不是所有的事情都能套用現成的方法解決的
有些時候會用到學過的演算法知識來解決新的問題
二分法二分查詢演算法 必須處理有序的列表
l =[2
,3,5
,10,15
,16,18
,22,26
,30,32
,35,41
,42,43
,55,56
,66,67
,69,72
,76,82
,83,88
]def
find
(l, aim, start=
0, end=
none):
end =
len(l)
if end is
none
else end
mid_index =
(end - start)//2
+ start
if l[mid_index]
< aim:
find(l, aim, start=mid_index +
1, end=end)
elif l[mid_index]
> aim:
find(l, aim, start=start, end=mid_index -1)
else
:print
('找到了'
, mid_index, aim)
find(l,
66)
輸出:
上述的**不能找到列表中沒有的元素
l =[2
,3,5
,10,15
,16,18
,22,26
,30,32
,35,41
,42,43
,55,56
,66,67
,69,72
,76,82
,83,88
]def
find
(l, aim, start=
0, end=
none):
end =
len(l)
if end is
none
else end
mid_index =
(end - start)//2
+ start
if start <= end:
if l[mid_index]
< aim:
return find(l, aim, start=mid_index +
1, end=end)
elif l[mid_index]
> aim:
return find(l, aim, start=start, end=mid_index -1)
else
:return mid_index
else
:return
'找不到這個值'
ret1 = find(l,66)
print
(ret1)
ret = find(l,44)
print
(ret)
階乘def
jiech
(i):
if i ==1:
return
1else
:return i * jiech(i -1)
ret = jiech(4)
print
(ret)
斐波那契數列(1,1,2,3,5,8,13,21)def
fb(i)
:if i ==
1or i ==2:
return
1else
:return fb(i -1)
+ fb(i -2)
num =
input
('input number:'
)for i in
range
(int
(num)):
ret = fb(i +1)
print
(ret, end=
'\t'
)
遞迴函式及尾遞迴
自己呼叫自己的函式,一去一回就是遞迴函式 示例一 def digui n print n,1 if n 0 digui n 1 print n,2 digui 5 示例二 階乘 num 1 def func n global num if n 0 func n 1 num n return num ...
遞迴演算法與遞迴函式
遞迴演算法就是通過將問題不斷分解為同類子問題而解決問題的方法。絕大多數程式語言是支援函式的自呼叫的,也就是支援函式自身來進行遞迴。根據計算理論,可以證明出遞迴可以完全取代迴圈,因此在很多函式程式設計中習慣使用遞迴來實現迴圈。但是遞迴有乙個問題就是需要不斷的呼叫函式,會有較大的開銷。遞迴的函式需要逐級...
遞迴函式及memset函式
原始思路 剛開始學習遞迴,開始的思路是直接暴力遞迴,當a,b,c為1 10的計算時還可以計算出結果,但是當數值變大後,一直得不出結果 上網查後得到新的方法 將計算後的資料儲存在三維陣列中,未計算的資料通過遞迴計算得到。以下為 標頭檔案 memory.h memset void s,int ch,si...