1. 程式人生 > >Python3&資料結構之遞迴

Python3&資料結構之遞迴

#遞迴
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......

用遞迴的方法來定義:

  • f(0) = 0 
  • f(1) = 1
  • f(n) = f(n-1) + f(n-2) , n>=2
#fibonacci
x = int(input("input a number:"))
def fibonacci(n):
    if n == 0:
        return 0
    if n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)

for i in range(x):
    print(fibonacci(i))