递归就是在函数内部调用其自身完成计算任务.
底层:在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出
使用递归注意两个点
1.递归函数第一步,先定义退出递归条件,避免无线递归栈溢出
2.返回递归计算结果
递归常用场景:
计算斐波,计算阶乘,字符串翻转,二叉树求高度,判断回文数,汉诺塔移动
Note:
1.使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。
2.针对尾递归优化的语言可以通过尾递归防止栈溢出,Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题。
#/bin/python
#翻转字符串
def reserver(strs):
if len(strs)<=1:
return strs
return reserver(strs[1:])+strs[0]
if __name__== '__main__':
a="abcdefg"
print(reserver(a))
[root@localhost ~]# python digui.py
gfedcba
#/bin/python
#斐波那契数列
def fib(n):
if n==0:
return 0
if n==1:
return 1
return fib(n-1)+fib(n-2)
if __name__== '__main__':
print(fib(7))
网友评论