目錄
1:遞歸函數
遞歸函數就是在函數中調用它自身,其主要用於將複雜問題分解爲多個子問題,然後再對子問題進行拆分,分解成更小的問題,直到不能再拆分爲止。
爲了防止遞歸函數無休止地進行,必須在函數內有終止條件。
2:遞歸函數的最大深度
在Python中遞歸函數的最大深度是997
def func(n):
print(n)
n += 1
func(n)
func(1)
3:重置遞歸函數的最大深度
import sys
print(sys.setrecursionlimit(2000))
def func(n):
print(n)
n += 1
func(n)
func(1)
4遞歸函數示例
4.1 計算階乘 n!
'''
分析:
n! = 1*2*3*4*....(n-2)*(n-1)*n
我們使用函數 fact(n) 來表示n! ,即 fact(n) = n!
n! = 1*2*3*4*....(n-2)*(n-1)*n = fact(n)
(n-1)! = 1*2*3*4*....(n-2)*(n-1) = fact(n-1)
可以推導出:
n! = fact(n-1) * n
同理,fact(n-1) = fact(n-2)*(n-1)
......
直到 n=1 即 1! = 1 的時候不再進行分解;
'''
def fact(n):
if n == 1:
return 1
return n*fact(n-1)
print(fact(5)) # 120
'''
5! 執行過程如下:
5*fact(4)
5*(4*fact(3))
5*(4*(3*fact(2)))
5*(4*(3*(2*fact(1))))
5*(4*(3*(2*1)))
'''
4.2:斐波納契數列
斐波納契數列:1,1,2,3,5,8,13......(該數列中,有n個數字,從第三個數字開始:數值 =前第一個數字 + 前面第二個數字)即:n=(n-2)+(n-1)
# 1,1,2,3,5,8,13,21,34,55,......
def Fibonacci(n):
if n== 1 or n == 2:
return 1
else:
return Fibonacci(n-1) + Fibonacci(n-2)
print(Fibonacci(9))
4.3:求x的n次方
# 求x的n次方(n大於等於0),即n個x相乘
def func(x,n):
if n == 0:
return 1
else:
return func(x,n-1) * x
print(func(3,10))