#遞迴
def fact(x):
if x == 1:
return 1
else:
return x * fact(x - 1)
#tail recursion(尾遞迴)
def tail_recusion(x,total=1):
if x == 1:
return total
else:
return tail_recusion(x-1,total*x)
print(fact(5))
print(tail_recusion(5))
以上是遞迴和尾遞迴的**。
在學習遞迴的同時要了解棧(stack)這種資料結構。
stack只有兩種操作:壓入(插入)和彈出(刪除和讀取)。
注:python對遞迴的次數有限制,當遞迴深度超過1000時,會丟擲異常:
recursionerror: maximum recursion depth exceeded in comparison
用遞迴寫fibonacci:fibonacci數列為:0、1、1、2、3、5、8、13、21......
用遞迴的方法來定義:
#fibonacci
x = int(input("input a number:"))
def fibonacci(n):
if n == 0 or n == 1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
for i in range(x):
print(fibonacci(i))
Python3 資料結構
python中列表是可變的,這是它區別於字串和元組的最重要的特點,一句話概括即 列表可以修改,而字串和元組不能。列表的基本特點 操作 描述把乙個元素新增到列表的結尾,相當於 a len a x list.extend l 在列表末尾新增多個物件,引數可謂迭代物件相當於 a len a l list....
Python3 資料結構之快速排序
然後使用快速排序使用了分而治之 divide and conquer,d c 的思想 主要思想就是把乙個無序陣列分為3個部分 遞迴的思想重複以上步驟 參考演算法 給出的 quicksort def quick sort arr if len arr 2 return arr else pivot a...
Python3 資料結構之希爾排序
希爾排序 shell sort 演算法描述 step1 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序。step2 依次縮減增量再進行排序。step3 待整個序列中的元素基本有序 增量足夠小 時,再對全體元素進行一次直接插入排序。演算法結束。因為直接插入...