#递归函数:函数内调用自身的函数(俄罗斯套娃)
举例:求4的阶乘
分析:
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
1! = 1
先定义函数,只有当num 为1时,是他本身,所以只有这一个特例而已,用if写出来,其余的情况用else写。
>>def rec(num):
>> if num == 1:
>> return 1
>> else:
>> return num * rec (num -1)
>>result = rec(4)
>>print(result)
24
不知道else后怎么写,怎么办? :
函写到数第五行的时候,可以用2!来举特例。2! = 2 * 1!
先写成:
return 2 * rec(1)
然后用变量num替换掉数值,变成
return num * ruc (num - 1)
注意:
递归函数容易造成死循环,原因是没有结束递归的条件,而且会造成栈溢出。
在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
拓展:
import sys
#设置递归次数
sys.setrecursionlimit = 1000 #最多递归1000次
#获取递归次数
sys.getrecursionlimit()
来源:CSDN
作者:宇新_Cici
链接:https://blog.csdn.net/weixin_45043549/article/details/104316914