如果一个函数在其内部调用了函数本身,那这个函数就是递归函数,这个调用的过程称为递归调用。
1、求和:1+2+3+4+......+n
按照之前学习循环、函数的方法,直接可以用一个循环解决。
def sum(n):
sum = 0
for x in range(1,n+1):
sum += x
return sum
print(sum(5))
现在我们用递归来解决这个求和问题
def sum(n):
if n == 1:
return 1
else:
return sum(n-1) + n
print(sum(5))
我们在计算sum(5)时,程序的执行过程如下:
>>>sum(4) + 5
>>>sum(3) + 4 + 5
>>>sum(2) + 3 + 4 + 5
>>>sum(1) + 2 + 3 + 4 + 5
>>>1 + 2 + 3 + 4 + 5
2、求阶乘:n! = 1 x 2 x 3 x 4x5x...... x n
def sum(n):
if n == 1:
return 1
else:
return sum(n-1) * n
print(sum(5))
3、斐波那契数列(兔子数列)
概念(摘自百度百科):斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
现在我们用递归来实现斐波那契数列的计算:输出斐波那契第n个数
def fib(n):
if n
return 1
else:
return fib(n - 1) + fib(n - 2)
print(fib(8)) #第8个数是21
输出:
使用递归函数的优点是定义简单,逻辑清晰。
理论上,所有的循环都可以写成递归函数,但循环的逻辑不如递归清晰。
领取专属 10元无门槛券
私享最新 技术干货