以上面一个公式为例:

import numpy as np

def getPi(n):

if n == 0:

return np.power(-1,n)*(1.0/(2*n+1))

else:

return np.power(-1,n)*(1.0/(2*n+1))+getPi(n-1)

print 4*getPi(100)

可以通过上面一个递归实现。

特点:

①递归就是在过程或者函数里调用自身。

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

③递归算法解题通常显得很简洁,但递归算法解题的效率较低。所以一般不倡导使用递归算法设计程序。

④在递归调用的过程当中系统的每一层的返回点、局部变量等开辟了栈来存储。递归函数次数过多容易造成栈溢出等。

所以一般不倡导用递归算法设计程序。

要求:

递归算法所体现的"重复"一般有三个条件:

①每次在调用规模上都有所缩小(通常是减半)。

②相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。

③在问题的规模极小时必须用直接接触解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),

无条件的递归调用将会成为死循环而不能正常结束。

每当你调用一个函数,在这个函数执行前都会将之前的代码地址(也就是调用点)入栈,等被调用的函数执行完将地址出栈,程序根据这个数据返回调用点。

若递归调用次数太多,就会只入栈不出栈,于是堆栈就被压爆了,此为栈溢出。

python中的解决办法:

1、人为设置递归深度

import sys

sys.setrecursionlimit(1000000) #括号中的值为递归深度

事实上并不能完全解决,太多还是会程序崩溃的。

2、所谓的尾递归

import numpy as np

def getPi(n,m):

if n == 0:

return m+np.power(-1,n)*(1.0/(2*n+1))

else:

return getPi(n-1,m+np.power(-1,n)*(1.0/(2*n+1)))

print 4*getPi(100,0)

尾递归的写法就是将操作的值作为参数传递,事实上,python并不支持尾递归的优化!而且对递归的次数有限制,当递归深度超过1000时,会抛出异常。

故对于继续研究突破递归次数的话,虽然有高手找到解决办法,并没有太大意义。

3、利用迭代的方式,而不是使用递归(譬如,reduce)

import numpy as np

s = reduce(lambda x,n:x+np.power(-1,n)*(1.0/(2*n+1)),[np.power(-1,0)*(1.0/(2*0+1))]+range(1,100000))

print 4*s

s = reduce(lambda x,n:x+np.power(-1,n)*(1.0/(2*n+1)) if x>0 else np.power(-1,x)*(1.0/(2*x+1))+np.power(-1,n)*(1.0/(2*n+1)),\

range(0,100000))

print 4*s

可以看到,利用reduce函数是处理这类问题的比较好的办法。用一句话总结:

普通程序员用迭代,天才程序员用递归!

Python中利用进度条求圆周率

从祖冲之到现在,圆周率的发展越来越丰富,求法也是越来越快其中: 1.求圆周率的方法: (1)蒙特卡罗法 这是基于“随机数”的算法,通过计算落在单位圆内的点与正方形内的比值来求圆周率PI. 如果一共投入 ...

python中的递归

python中的递归 关注公众号"轻松学编程"了解更多. 文章更改后地址:传送门 间接或直接调用自身的函数被称为递归函数. 间接: def func(): otherfunc() ...

Python中解决递归限制的问题

在做某些算法时,使用递归会出现类似下面的报错: RuntimeError: maximum recursion depth exceeded python默认的递归深度是很有限的,大概是900多的样子 ...

python中使用递归实现反转链表

反转链表一般有两种实现方式,一种是循环,另外一种是递归,前几天做了一个作业,用到这东西了. 这里就做个记录,方便以后温习. 递归的方法: class Node: def __init__(self,i ...

python中的递归小实例

#1.n! def fact(n): if n == 0: return 1 else: return n*fact(n-1)print(fact(10)) #2.斐波那契数列F(n)=F(n-1)+ ...

JS中的递归

递归基础 递归的概念 在程序中函数直接或间接调用自己 直接调用自己 简介调用自己 跳出结构,有了跳出才有结果 递归的思想 递归的调用,最终还是要转换为自己这个函数 如果有个函数foo,如果他是递归 ...

python中的归并排序

本来在博客上看到用python写的归并排序的程序,然后自己跟着他写了一下,结果发现是错的,不得不自己操作.而自己对python不是非常了解所以就变百度边写,最终在花了半个小时之后就写好了. def m ...

python中的迭代与递归

遇到一个情况,需要进行递归操作,但是呢递归次数非常大,有一万多次.先不说一万多次递归,原来的测试代码是java的,没装jdk和编译环境,还是用python吧 先看下原本的java代码: public ...

随机推荐

使用dom4j操作XML

DOM4J介绍 DOM4J是使用Java语言编写的,用于读写及操作XML的一套组件,DOM4J同时具有DOM修改文件的优点和SAX读取快速的优点. DOM4J的使用 首先下载dom4j的JAR包,我用 ...

利用 img 和 script 发送跨域请求

利用img.src可以发送http请求,但是发送http请求不是img.src的真正用意. 同样,用script.src去请求jsonp格式的接口数据也不是script元素的最初设计用途. 但是这些歪 ...

如何用SVN进行个人版本管理

事实上SVN的确是我用过的最好的源码管理工具,虽然我用过的这类工具并不多,只有VSS.CVS和SVN,其它像PVCS. TeamSource.ClearCase之类的只有耳闻,因为它们都是商业产品,并 ...

poj3589---判断两个数有多接近

#include #include int main() { ],s2[]; int a,b,i,j,n; scanf("% ...

辛星PHP教程之yii和ci教程已经写完,望与朋友们交流

记得有个朋友给我说,你写的PHP框架是不是过于少了.我感觉仅仅有一个thinkphp确实不好,于是就又写了下yii和ci的教程,事实上我之前是研究过这两个框架的,因此写起来也还算得心应手吧.估计接下 ...

Python3常用网络编程模块介绍

一.socket模块 网络服务都是建立在socket基础之上的,socket是网络连接端点,是网络的基础:每个socket都被绑定到指定的IP和端口上: 1.首先使用socket(family=AF_ ...

java课程设计——猜数游戏个人博客

1.团队课程设计链接 团队博客:http://www.cnblogs.com/springbreezemiles/p/7064135.html 2.个人负责模块 猜数部分的算法及代码实现. 3.自己的 ...

基于zepto的移动端日期和时间选择控件

前段时间给大家分享过一个基于jQuery Mobile的移动端日期时间拾取器,大家反应其由于加载过大的插件导致影响调用速度.那么今天我把从网络上搜集到的两个适合移动端应用的日期和时间选择插件分享给大家 ...

sql*loader以及oracle外部表加载Date类型列

Oracle sqlldr LOAD DATAINFILE *INTO TABLE testFIELDS TERMINATED BY X'9'TRAILING NULLCOLS(    c2 &quo ...

30个php操作redis常用方法代码例子(转载)

1.connect 描述:实例连接到一个Redis.参数:host: string,port: int返回值:BOOL 成功返回:TRUE;失败返回:FALSE示例: $redis = new red ...

C语言递归求圆周率,python中的递归问题,求圆周率相关推荐

  1. python 中的递归深度限制和重置

    我的CSDN主页 My Python 学习个人备忘录 我的博文推荐 python 中的递归深度限制和重置 import sys sys.getrecursionlimit() #查看当前递归深度限制 ...

  2. Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名)

    Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名) 目录

  3. python中使用递归实现斐波那契数列

    python中使用递归实现斐波那契数列 python中使用递归实现斐波那契数列 先来了解一下 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家莱昂纳多·斐波那契(Leo ...

  4. python中的sympy模块求导和解方程

    利用python中的sympy模块求导和解方程 对sympy这个模块我不是很了解,我学习python主要是想往机器学习和深度学习方向发展.这次了解到有这个模块,是因为有同学在写论文中要用到求导,并且计 ...

  5. Python中的递归【建议收藏】

    前言:本博文主要讲解Python中的递归,之前在C#中也讲过递归的一些知识--深入理解C#方法重载和递归,有兴趣的朋友可以阅读一下! 文章目录 一.递归的应用场景 二.生活中的递归 1. 故事案例 2 ...

  6. python语言结构化语言_如何在python中处理结构化语言文件

    我有一个像这样的大型结构化语言文件:TASK SchM_Task { TYPE = AUTO; SCHEDULE = NON; PRIORITY = 160; ACTIVATION = 1; TIMI ...

  7. python中的递归思想_〖Python〗-- 递归、面向对象初识及编程思想

    [递归.面向对象初识及编程思想] 一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递归策 ...

  8. python中关系运算符惰性求值,lazy.js 惰性求值实现分析

    背景:惰性求值? 来看一个 lazy.js 主页提供的示例: var people = getBigArrayOfPeople(); var results = _.chain(people) .pl ...

  9. python中关系运算符惰性求值_python对象属性惰性取值

    python面向对象进阶 在知乎上面看到这个如何让python对象属性具有惰性求值的能力,认真学习了一番,记录一下. __setattr__.__getattr__.__delattr__ class ...

  10. python中编写一个函数求数值x的绝对值(python实验二)

    (1)函数的调用(2)如何求函数的绝对值 目录 一.python求绝对值的三种方法 二.使用步骤 三.函数调用 一.python求绝对值的三种方法 1.条件判断 2.内置函数abs() 3.内置模块 ...

最新文章

  1. 常用数据结构讲解与案例分析
  2. 使用组策略配置Windows 7的高级防火墙
  3. C++编写Config类读取配置文件
  4. exists的用法 python_5 年 Python ,总结的 10 条 Python 使用技巧
  5. SIM300命令参考
  6. go语言中顺序查找的案例--人名查找
  7. Throwable类
  8. 合成孔径 saft matlab,合成孔径聚焦超声成像研究
  9. 本科生计算机论文中文核心,本科生可以发表核心期刊论文吗
  10. Easy Mock全解及使用
  11. 文本框仅允许输入大于0的正整数
  12. 计算机主机箱内部各部件,电脑主机箱内的部件组装图解
  13. 【CQF Math Class 数学笔记】
  14. FA固定资产录入时的细节:是否输入累计折旧
  15. 【毕业设计】基于spring boot的图书管理系统 -java 计算机 软件工程
  16. 【CSS】盒子模型内边距 ② ( 内边距复合写法 | 代码示例 )
  17. 拼多多开店做些什么有什么要求?开店的流程是什么?
  18. 所见即所得:四款免编程移动游戏开发引擎推荐
  19. EasyNVR使用详情功能-通道配置Excel
  20. 正则表达式简介 -- 整理 by Emerald 绿色学院 - Green Institute

热门文章

  1. Ubuntu安装sasquatch时执行./build.sh报错:--no-check-certificate
  2. 二进制、十进制、八进制、十六进制转换对照表
  3. web全栈工程师的自我修养(实际操作方面)
  4. 系统辨识(一):相关概念
  5. 闭环系统辨识matlab,系统辨识-12-闭环辨识
  6. 百战程序员python视频下载_[视频教程] 百战程序员python400集(第一季115集)
  7. 【神经网络算法入门】详细推导全连接神经网络算法及反向传播算法+Python实现代码
  8. 键盘精灵 android,「安卓按键精灵」使用按键发送邮件
  9. GPX文件格式适用于GPS定位的模拟以及生成文件
  10. circNet:人类环状RNA数据库