Python3中的遞歸函數

目錄

1:遞歸函數

2:遞歸函數的最大深度

3:重置遞歸函數的最大深度

4遞歸函數示例

4.1 計算階乘 n! 

4.2:斐波納契數列

4.3:求x的n次方


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))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章