递归函数的使用及注意事项

两盒软妹~` 提交于 2020-02-16 03:15:11

#递归函数:函数内调用自身的函数(俄罗斯套娃)

举例:求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()

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!