开发者学堂课程【Python入门 2020年版:递归的练习】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10339
递归的练习
内容介绍
一、#使用递归求n!
二、#使用递归求斐波那契数列的第n个数字
一、#使用递归求n!
使用递归求n!和求和差不都,就是从第一个数的阶乘开始乘到最后一个数的阶乘,n!=n*(n-1)!
def factorial(n):
return n * factorial(n - 1)
会有一个问题,从第一个阶乘开始一直乘,就停不下来,如果想要它停下来,
If n ==0:
Return 1
0
!=1 1!=0x1!
print(factorial(6)#6*factorial(5)===>6*5*factorial(4)==>6*5*4*3*2*1*1
运行结果:720
大家会发现循环也不算难,核心思想就是下一个数等于之前两个数的和,这个地方使用递归就更加简单。
二、#使用递归求斐波那契数列的第n个数字
#1,1,2,3,5,8,13,21,34,55,144
def fibonacci(n):
if n==6:return 8
if n==7,return 13
return fibonacci(n-2) + fibonacci(n-1)
斐波那契里面第n个数等于第n-1个数加上n-2个数,
F(8)=f(6)+f(7)
如果f(6)和f(7)都知道就可以计算出f(8)
8+13==>21
这样有个小问题,只能计算6以上,7以上的斐波那契数列,
def fibonacci(n):
if n==2:return 1
return fibonacci(n-2) + fibonacci(n-1)
F(8)=f(6)+f(7)
= f(4)+ f(5) + f(5) + f(6)
= f(2)+f(3)+ f(4)+f(3)+ f(4)+f(3)+ f(4)+f(5)
= f(0)+f(1)
没有第零个数,所以2就不应该拆了=1+1+f(1)+f(2)+f(3)+f(2)+f(1)+f(2)+f(3)+f(2)+f(1)+f(2)+f(3)+f(4)+f(3)
=1+1+1+1+f(3)+1+1+1+f(3)+1+1+1+f(3)+f(4)+f(3)
最终拆完的结果是21个1相加,
最后再加一个返回区间
def fibonacci(n):
if n==2 or n ==1:return 1
return fibonacci(n-2) + fibonacci(n-1)
print(Fibonacci(8))
运行结果:21
print(Fibonacci(9))
运行结果:44