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

(1)递归就是在过程或函数里调用自身;

(2)在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

递归算法一般用于解决三类问题:

(1)数据的定义是按递归定义的。(比如Fibonacci函数)

(2)问题解法按递归算法实现。(回溯)

(3)数据的结构形式是按递归定义的。(比如树的遍历,图的搜索)

递归的缺点:递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。

"""非递归方式呈现"""

sum = 0

for obj in range(1,101):

sum+=obj

print sum

""""1+2+3+...+100"""

def foo(n):

if n>0:return n+foo(n-1)

if n<=0:return 0

print foo(100)

"""阶乘"""

def fac(n):

if n==0 or n==1:

return 1

else:

return n*fac(n-1)

print fac(10)

def fact(n):

if n==1:

return 1

return n * fact(n - 1)

上面就是一个递归函数。可以试试:

如果我们计算fact(5),可以根据函数定义看到计算过程如下:

===> fact(5)

===> 5 * fact(4)

===> 5 * (4 * fact(3))

===> 5 * (4 * (3 * fact(2)))

===> 5 * (4 * (3 * (2 * fact(1))))

===> 5 * (4 * (3 * (2 * 1)))

===> 5 * (4 * (3 * 2))

===> 5 * (4 * 6)

===> 5 * 24

===> 120

递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。可以试试fact(1000):

def fact_iter(product,count,max):

if count > max: ####

return product ####

return fact_iter(product * count, count+1, max) ###

print(fact_iter(1,1,5)) #1*1*2*3*4*5

print(fact_iter(1,2,5))

print(fact_iter(2,3,5)) #2*3*4*5

print(fact_iter(6,4,5)) #6*4*5

print(fact_iter(24,5,5)) #24*5

print(fact_iter(120,6,5)) #120

使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。

针对尾递归优化的语言可以通过尾递归防止栈溢出。尾递归事实上和循环是等价的,没有循环语句的编程语言只能通过尾递归实现循环。

Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题。

python递归必须要有_python递归相关推荐

  1. python遍历任意层次字典_Python递归中 return 代码陷阱

    1 #获取字典中的objkey对应的值,适用于字典嵌套 2 #targetDict:要查找的字典;serchKey:要查找的目标key 3 #ret:递归过程中,向外部(上层)传送 return值.被 ...

  2. python递归调用详解_Python递归调用自己的函数

    原博文 2019-11-16 10:36 − def fact(x): if x == 1: return 1 else: return x * fact(x-1) ... 0 191 相关推荐 20 ...

  3. python利用递归函数实现斐波那契数列_Python递归及斐波那契数列

    原博文 2016-07-01 23:30 − 递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ...

  4. python函数作用域与闭包_python基础-08-内置函数、作用域、闭包、递归

    python基础-内置函数.作用域.闭包.递归 1.常见的内置函数 常见的内置函数: 查看内置函数: print(dir(__builtins__)) 常见函数 type() 数据类型 print() ...

  5. 在python中用递归的方法编程_python基础之函数,递归,内置函数

    阅读目录 一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量, ...

  6. python函数递归求和详解_Python递归函数详细分析

    什么是递归? 递归,就是在函数运行中自己调用自己 代码示例: def recursion(n): # 定义递归函数 print(n) # 打印n recursion(n+1) # 在函数的运行种调用递 ...

  7. python递归必须要有_Python的递归

    递归 是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象.在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知.使用递归解决问题,思路清晰,代码少.但是在主流高 ...

  8. python匿名函数的作用_Python中的匿名函数及递归思想简析

    匿名函数 前言 上次咱们基本说了一下函数的定义及简单使用,Python中的基本函数及其常用用法简析,现在咱们整点进阶一些的.同样都是小白,咱也不知道实际需要不,但是对于函数的执行顺序以及装饰器的理解还 ...

  9. python解决物理问题_python递归解物理题

    课程设计:丁大喵 文章编辑:丁丁猫 关键词:递归 电阻 全局变量 This resistive network formsan infinite binary tree--every branch s ...

最新文章

  1. ArrayList 集合
  2. Altium Designer关闭板观察器,放大镜
  3. 事故通报绝不能一报了事22344
  4. mysql 8.0用doc修改密码_MYSQL8.0修改密码流程
  5. python 文件和目录 当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径。
  6. 谷歌眼镜Mirror app开发之简单新闻浏览页面
  7. 关于图像高速缩放算法,目前看到的最好的最清晰的一篇文章2
  8. SQLite学习笔记
  9. TM7705、TM7707使用
  10. 互联网晚报 | 1月4日 星期二 | 中国移动1月5日在上交所上市;元旦档总票房破10亿;特斯拉连续6个季度交付量创纪录...
  11. spring-boot mybadis多数据源配置
  12. iOS转场动画之微信朋友圈图片查看器
  13. 转行网络工程师,软考和华为认证选哪个?
  14. 易周金融 | 邮惠万家银行开业;微信公众号叫停四类金融营销宣传
  15. Cannot commit, transaction is already closed
  16. CET-4 week 6th -- 后缀
  17. Paypal账户注册教程!
  18. LaTeX命令速查手册1
  19. linux7 seinfo,SELinux+
  20. CentOS7内核参数

热门文章

  1. 【HTML 教程】链接标签
  2. OSChina 周三乱弹——人的天性是什么?
  3. oracle误删数据和误删表的恢复方法
  4. 【开源】蓝奏云网盘搜索引擎网站系统源码,提供蓝搜网页版的源代码
  5. taro vue3引入vantweapp
  6. css 去掉 ie10,11 中 input [type=“password“] 中的眼睛图标
  7. python绘制雪花图形
  8. icmp回复报文_ICMP报文
  9. GMT、UTC、时区、本地时间、UNIX时间戳
  10. [Codeforces301E][DP]Yaroslav and Arrangements