python學習遞迴
遞迴 函式呼叫自身,且有終止條件
python預設遞迴層數為100
可以修改層數
import sys
sys.setrecursionlimit(1000)
遞迴求階乘
------------1迭代
def factorial(n):
result = n
for i in range(1, n)
result *= i
return result
number = int(input('請輸入一個整數'))
result = factorial(number)
print('%d 的階層是%d' % (number, result))
-------------2遞迴
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
number = int(input('請輸入一個整數'))
result = factorial(number)
print('%d 的階層是%d' % (number, result))
遞迴有危險性,因為有棧操作,消耗記憶體,所以一定要傳出去,歸回值
斐波那契數列
F(n)=F(n-1)+F(n-2) F(1)=1 F(2)=1
----------1迭代
def factorial(n):
a = 1
b = 1
if n>=1:
print('1 --> 1\n')
if n>=2:
print('2 --> 1\n')
if n>=3:
for i in range(1, n-1):
c = a + b
print('%d --> %d\n'%(i+2, c))
a = b
b = c
return c
else:
return 1
number = int(input('輸入一個數:'))
result = factorial(number)
print('%d 的斐波那契數是 %d'%(number, result))
--------------2遞迴
def fab(n):
if n <1:
print('輸入有誤')
return -1
if n == 1 or n == 2:
return 1
else:
return fab(n-1) + fab(n-2)
number = int(input('輸入一個數:'))
result = fab(number)
if result != -1:
print('%d 的斐波那契數是 %d'%(number, result))
遞迴很好寫,但很費記憶體,比如35以上就需要一段時間才能計算出來
漢諾塔遊戲演算法
def hanoi(n, x, y, z):
if n ==1:
print(x, '-->', z)
else:
hanoi(n-1, x, z, y)# 將前n-1個盤子從x移動到y上
print(x, '-->', z)# 將最底下盤子從x移動到z上
hanoi(n-1, y, x, z)# 將y上的n-1個盤子移動到z上
n = int(input('輸入漢諾塔層數:'))
hanoi(n, 'X', 'Y', 'Z')