python递归必须要有_python递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
(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递归相关推荐
- python遍历任意层次字典_Python递归中 return 代码陷阱
1 #获取字典中的objkey对应的值,适用于字典嵌套 2 #targetDict:要查找的字典;serchKey:要查找的目标key 3 #ret:递归过程中,向外部(上层)传送 return值.被 ...
- python递归调用详解_Python递归调用自己的函数
原博文 2019-11-16 10:36 − def fact(x): if x == 1: return 1 else: return x * fact(x-1) ... 0 191 相关推荐 20 ...
- python利用递归函数实现斐波那契数列_Python递归及斐波那契数列
原博文 2016-07-01 23:30 − 递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ...
- python函数作用域与闭包_python基础-08-内置函数、作用域、闭包、递归
python基础-内置函数.作用域.闭包.递归 1.常见的内置函数 常见的内置函数: 查看内置函数: print(dir(__builtins__)) 常见函数 type() 数据类型 print() ...
- 在python中用递归的方法编程_python基础之函数,递归,内置函数
阅读目录 一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量, ...
- python函数递归求和详解_Python递归函数详细分析
什么是递归? 递归,就是在函数运行中自己调用自己 代码示例: def recursion(n): # 定义递归函数 print(n) # 打印n recursion(n+1) # 在函数的运行种调用递 ...
- python递归必须要有_Python的递归
递归 是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象.在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知.使用递归解决问题,思路清晰,代码少.但是在主流高 ...
- python匿名函数的作用_Python中的匿名函数及递归思想简析
匿名函数 前言 上次咱们基本说了一下函数的定义及简单使用,Python中的基本函数及其常用用法简析,现在咱们整点进阶一些的.同样都是小白,咱也不知道实际需要不,但是对于函数的执行顺序以及装饰器的理解还 ...
- python解决物理问题_python递归解物理题
课程设计:丁大喵 文章编辑:丁丁猫 关键词:递归 电阻 全局变量 This resistive network formsan infinite binary tree--every branch s ...
最新文章
- [译]Mimic, 轻量级Web Service测试桩
- 面试官:我想用Nginx提升系统10倍性能,你有哪些建议?
- MariaDB的Aria存储引擎
- Visual Studio 2017 15.6发布
- C++ 引用本质就是一个指针常量
- gdal for java_gdal java环境配置
- ssis 数据转换_SSIS数据透视和SSIS数据透视转换概述
- 5. 直接三角形分解法
- 在 IIS 中部署 SPA 应用,多么痛的领悟!
- [转载] python字符串情感分析_python进行情感分析
- 元胞自动机及其MATLAB实例
- 一、数据挖掘—初识数据挖掘
- 西安电子科技大学计算机学院评论,放弃985,选择西安电子科技大学计算机专业,网友表示没毛病...
- 浙江杭州1040阳光工程叫家里人来投资违不违法?能不能赚到钱?
- 基于Altium Designer 09制作LOGO的方法
- 看google如何招人
- 过去式与过去分词的用法与区别
- 什么是软件危机?软件危机的主要表现是什么?什么是软件?什么是软件工程?什么是软件过程?软件过程与软件工程方法学有何关系?​​​​​​​什么是软件开发方法?软件开发方法主要有哪些?
- 用计算机弹最简单的歌,计算器也能演奏美妙音乐
- php镂空窗,镂空文字效果 视频画面变成镂空文字效果制作