递归函数

在函数内部,可以调用其他函数,如果一个函数的内部调用了自己本身,那么这个函数就是递归函数。

什么?函数还可以自己调用自己?那不是一个死循环吗?请看下例:

# 求1-100的和

def sum_num(n):
result = 0
for i in range(1, n+1):
result += i
return result sum_num(100)

会不会感觉很繁琐,如果使用递归函数来实现会不会简单些?

def sum_num(n):
if n <= 0:
return 0
return n + sum_num(n-1) sum_num(100)

分析一下代码,当n小于等于0的时候,直接给出和值为0,这句不能省。当n大于0时,结果是n加上sum_num(n-1)。这里的sum_num(n-1)又是一次sum_num函数的调用,不过参数的值变成了n-1,要得sum_num(n)到的值就必须等待sum_num(n-1)的值被计算出来,同样要得到sum_num(n-1)的值必须等待sum_num(n-2)的值,如此一路推算下去,直到sum_num(0),因为if语句的存在,它不需要等待sum_num(-1)的计算了,而是直接给出结果0。然后程序一路返回,直到回到最初的sum_num(n),并给出最终结果。

递归核心思想: 每一次递归,整体问题都要比原来减小,并且递归到一定层次时,要能直接给出结果。

函数的预解析

在Python语言中,我们知道Python是一门脚本语言,类似于JavaScript之类的语言,那么让我们一起了解一下Python函数的预解析吧。

函数的执行过程

def func():
pass

上面函数,如果我们在函数定义前调用函数,会出现什么结果?(报错) 那么问题来了?

def main():
func() def func():
pass main()

本例子中,我们发现调用main()函数时,func()函数也被调用了,并无异常。这是为什么?

因为在代码执行的过程中,Python会扫描代码,发现main()函数被调用,那么执行main()函数,main()函数内func()函数被调用,继续执行func()函数。

最新文章

  1. F#之旅5 - 小实践之下载网页(爬虫基础库)
  2. AC6102 DDR2测试工程
  3. actionbar部分设置:colorPrimary colorPrimaryDark colorAccent 下部阴影
  4. 国内公共DNS
  5. 初识PCA数据降维
  6. 11个实用jQuery日历插件
  7. [POJ] 2239 Selecting Courses(二分图最大匹配)
  8. 转: ES6异步编程: co函数库的含义与用法
  9. Android开发 解决EditText与NestedScrollView 滚动冲突问题
  10. Django之路由
  11. websocket作用
  12. 微软BI 之SSAS 系列 - 多维数据集维度用法之二 事实维度(退化维度 Degenerate Dimension)
  13. Eigen中的map
  14. gcc -ldl 选项作用
  15. Mybatis通过GNDL语法引用静态常量或者枚举类型
  16. MySQL Binlog三种格式介绍及分析
  17. ASP.NET MVC HttpVerbs.Delete/Put Routes not firing
  18. 如何让多个android listview同时使用一个滚动条
  19. Linux ssh服务
  20. [ 转 ] 为 phpstorm 自定义默认 Web 服务器

热门文章

  1. 设计模式课程 设计模式精讲 13-2 享元模式coding
  2. Java 对不同类型的数据文件的读写操作整合器[JSON,XML,CSV]-[经过设计模式改造](2020年寒假小目标03)
  3. 微信红包系统设计 &amp; 优化
  4. UISearchBar设置背景色
  5. 还在用SimpleDateFormat?Java8都发布N年了,转LocalDateTime吧
  6. cookie、sessionStorage和localStorage的区别
  7. postgres登录失败Connection refused与SSL off失败
  8. 如何对接网建SMS短信通短信验证码接口
  9. 「Luogu P2845 [USACO15DEC]Switching on the Lights 开关灯」
  10. spinner的使用