什么是递归:
在函数内部,可以调用其他函数。如果一个函数在内部调用自已本身,这个函数就叫做递归函数。
递归的特性:
必须有一个明确的结束条件
每次进入更深一层递归时,问题规模相比上次递归都应有所减少
递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
递归的应用场景
递归在特定场景下还是挺有用的,以后学的一些算法就得用到递归,比如堆排、快排等,现在看还是有些复杂的,以后再讲。
递归的运行过程
def func(n):
n = int(n/2)
print(n)
if n > 0:
func(n)
print(n)
func(10)
5
2
1
0
0
1
2
5
输出解释:
用python实现递归的几个例子
1:斐波那契数列即著名的兔子数列:1、1、2、3、5、8、13、21、34、……
第一项和第二项是1,后面的每一项是前两项的加和。
def fibonacci(n):
# 给递归一个出口 第一位和第二位都是1
if n <=1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
2:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落 地时,共经过多少米?第10次反弹多高?
def heigthM(num, heigth, sum):
sum += heigth
heigth /= 2 #第一次返回高度50
print(heigth, sum) # 查看每次返回的高度和经过多少米
if num == 1:
return heigth ,sum
else:
sum += heigth # 返回到最高点时,经过多少米需要加上高度
return heigthM(num - 1, heigth, sum)
print(heigthM(10, 100, 0)) #num是次数,heigth是高度,sum是经过多少米