递归
递归是很经典的算法,通过递归可以用较少的代码量写出容易理解的程序,通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。一般来说,递归需要有边界条件、递归前进
段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
递归
- 递归的优点:代码比较容易编写
- 递归的缺点:效率不高,且层数过高容易造成栈的溢出
1 一些经典的递归算法
1.1 递归求阶乘
# 1!+2!+3!+4!+5!+...+n!
def factorial(n):
''' n表示要求的数的阶乘 '''
if n==1:
return n # 阶乘为1的时候,结果为1,返回结果并退出
n = n*factorial(n-1) # n! = n*(n-1)!
return n # 返回结果并退出
res = factorial(5) #调用函数,并将返回的结果赋给res
print(res) # 打印结果
120
1.2 递归求斐波那契数列
# 1,1,2,3,5,8,13,21,34,55,试判断数列第十五个数是哪个?
def fabonacci(n):
''' n为斐波那契数列 '''
if n <= 2:
''' 数列前两个数都是1 '''
v = 1
return v # 返回结果,并结束函数
v = fabonacci(n-1)+fabonacci(n-2) # 由数据的规律可知,第三个数的结果都是前两个数之和,所以进行递归叠加
return v # 返回结果,并结束函数
print(fabonacci(15)) # 610 调用函数并打印结果
610