博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归函数
阅读量:6690 次
发布时间:2019-06-25

本文共 643 字,大约阅读时间需要 2 分钟。

在函数内部可以调用其他函数,如果他调用自己,这就叫递归函数.

如果我们计算N!的阶乘

定义一个fact()函数

def fact(n):    if n==1:        return 1    return n * fact(n - 1)

计算fact(3),程序的执行过程是

=> fact(3)=> 3* fact(2)=> 3* (2 * fact(1))=> 3 * (2 * 1))=>3*2=>6

递归函数写起来简单代码少,和循环比起来B格高

但是使用递归函数要防止栈溢出,在计算机中函数的调用时通过栈(stack)这种结构调用的,每当进入一个函数调用就会增加一层栈帧,所以层数不能太多,否则会报一个

RuntimeError: maximum recursion depth exceeded in comparison

所以就有了尾递归来解决这个问题,也就是在进入下一个函数调用前,先将上一个函数的结果算好带过去,也就是return 语句不包含任何表达式

def fact(n):    return fact_iter(n, 1)def fact_iter(num, product):    if num == 1:        return product    return fact_iter(num - 1, num * product)

 

转载于:https://www.cnblogs.com/hanshuai0921/p/7053957.html

你可能感兴趣的文章
mssql timeout 超时时间已到
查看>>
[研究笔记]n个骰子得到点数和的概率分布
查看>>
解决ftp登录问题:500 OOPS: cannot change directory:/home/xxx 500 OOPS: child died
查看>>
python操作mysql总结
查看>>
Linux常用经典命令
查看>>
Android Studio 快捷键
查看>>
hive的函数
查看>>
MongoDB在Windows下安装配置
查看>>
Eclipse 项目有红感叹号、小红叉
查看>>
如何使用Dev C++调试(debug)c程序
查看>>
变革源自放弃
查看>>
MariaDB 10之TokuDB存储引擎
查看>>
Tip:Exchange 2010服务器激活
查看>>
2011年度十大杰出IT博客获奖感言
查看>>
网综同质化的这一年,为何“剧情式”会胜出?
查看>>
最新Android SDK/ADT/NDK的下载位置
查看>>
利用 FormData 对象发送 Key/Value 对的异步请求
查看>>
vlc做转发的命令
查看>>
跨站请求伪造CSRF
查看>>
关于同一用户不能同时登录问题的探讨(2/2)
查看>>