c++-递归问题,求各位大神解疑

问题描述

递归问题,求各位大神解疑

递归问题,求各位大神解答

这个递归哪里出问题了,为什么程序没有结果?



//根据 P/4=1-1/3+1/5-1/7.... 求P的近似值,要求精度为0.000001

#include"iostream"
using namespace std;

int Temp(int n){//求-1的n次方
    if(n==0)return 1;
    return -1*Temp(n-1);
}

double PI(){
    double sum=0;
    double temp=1.0;
    int count=0;//计数变量
    while(temp>=1e-6){
        count++;
        sum=sum+Temp(count-1)*temp;
        temp=1.0/(2*count+1);
    }
    return 4*sum;
}

int main(){
    cout<<"------------求PI的值-------------"<<endl<<endl<<endl<<endl;
    cout<<"根据 P/4=1-1/3+1/5-1/7.... 求P的近似值,要求精度为0.000001"<<endl<<endl;
    double Pi=PI();
    cout<<"PI="<<Pi;
    return 0;
}

解决方案

递归次数太多了,导致堆栈溢出。
while(temp>=1e-3) 就可以输出正常结果
while(temp>=1e-4)就不行了
我测试了一下大概while (temp >= 0.000104375)在我电脑上就到达极限了,要递归4790次。
建议求PI不要用递归

解决方案二:

干嘛用递归???(-1)的奇数次方式-1,偶数次方是1,直接根据count就知道,不要为了递归而递归,放在这里,递归不可取

解决方案三:

程序似乎没有问题。是出不了结果还是结果不正确?出不了结果肯定是循环没结束!while循环的结束条件要改一改,你写的条件在数学上是对的,但在计算机上是有问题的。由于0.000001太小了,跟0差不多,比较不出来。应该用绝对值函数比较。在头文件中包含math.h,然后用fabs(temp>0.000001)替代temp>=0.000001

解决方案四:

谢谢各位,更改后程序正常了

解决方案五:

递归开销着实很大...

时间: 2024-11-20 19:03:37

c++-递归问题,求各位大神解疑的相关文章

c++-递归问题求各位大神解答

问题描述 递归问题求各位大神解答 ###代码如下,请问这个递归哪里出问题了,问什么程序没有结果 //根据 P/4=1-1/3+1/5-1/7.... 求P的近似值,要求精度为0.000001 #include"iostream" using namespace std; int Temp(int n){//求-1的n次方 if(n==0)return 1; return -1*Temp(n-1); } double PI(){ double sum=0; double temp=1.0

iOS 蓝牙开发时,搜索蓝牙是,蓝牙名称有时候为空,有时候有值求大神解疑

问题描述 iOS 蓝牙开发时,搜索蓝牙是,蓝牙名称有时候为空,有时候有值求大神解疑 iOS 蓝牙开发时,搜索蓝牙是,蓝牙名称有时候为空,有时候有值求大神解疑

代码-怎么用递归解决ACM的发工资问题,求各位大神帮助

问题描述 怎么用递归解决ACM的发工资问题,求各位大神帮助 假设老师的工资都是正整数,单位元,人民币一共有100元.50元.10元.5元.2元和1元六种. Sample Input 3 1 2 3 0 Sample Output 4 #include using namespace std; int salary(int a) { static int sum=0; if(a==0) { cout< return sum; } if(a>=100) { sum+=a/100; a=a%100;

测试-hibernate 求各位大神 帮忙看一下

问题描述 hibernate 求各位大神 帮忙看一下 我做的一个Hibernate 一对多 多对一的 保存和读取操作 保存 没问题 但是 读取那老是提示 内存溢出 下面是 实体类 Department 类 有setter 和getter 方法 private Integer id; private String name; private Set employees=new HashSet(); public Integer getId() { return id; } public void

.net-sql列转行,求sql大神帮忙解决。

问题描述 sql列转行,求sql大神帮忙解决. 如题 姓名 部门 题目ID 题目答案 A 编辑部 1 tt A 编辑部 2 yy A 编辑部 3 hh B 测试部 1 tt B 测试部 3 cc 我想要这样的结果 姓名 部门 第一题 第二题 第三题 ...等 A 编辑部 tt yy hh B 测试部 tt NULL CC 解决方案 你的题目只有1,2,3还是不确定呢 解决方案二: SELECT distinct 姓名 ,部门 ,LEFT(UserList,LEN(UserList)-1) as

网页效果-领导让做一个效果不会做啊!求各位大神指点啊!

问题描述 领导让做一个效果不会做啊!求各位大神指点啊! 领导让小弟做一个微站的效果: 类似这种的:http://sla.sh.1251246865.cee.myqcloud.com/ 就是可以测试出你是什么人啊,这类的效果, 没有做过,不懂怎么做,有知道的大神吗,指点一下小弟,不胜感激 解决方案 这个需要找"神棍"之类的资料的,做应该是比较简单. 主要是找一个对应的算法.实在找不到,可以抄别人网站上的逻辑,只是要花费一些时间. 解决方案二: 主要就是自己定义一个算法,规则,然后一些数据

接口 百度地图 net-M站(就是手机站)接入百度APP,求各位大神解答

问题描述 M站(就是手机站)接入百度APP,求各位大神解答 最近公司要求在公司做的手机站上接入百度地图,实现导航功能, 我目前接了百度地图极速版的API,但是要求在用户手机上已装百度地图的APP的情况下 直接打开用户的百度地图APP,我在百度地图的接口里并没有找到接入APP的相关接口, 请问各位大神可有解决方案?(注:M站是手机WEB站,不是一个APP) 解决方案 1:首先判断是否安装了百度地图,包名:com.baidu.BaiduMap(不知道有没有更新,这个可以自己去找一下) 2:调用代码

求各位大神帮忙做一下编译原理程序设计

问题描述 求各位大神帮忙做一下编译原理程序设计 1.设计词法分析器 设计各单词的状态转换图,并为不同的单词设计种别码.将词法分析器设计成供语 法分析器调用的子程序.功能包括:具备预处理功能.将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计一个供词法分析调用的预处理子程序:能够拼出语言中的各个单词:http://ask.csdn.net/#将拼出的标识符填入符号表:返回(种别码, 属性值).2.目标代码生成器c. 能完成指定寄存器个数的情况下将一中间代码程序段翻译成汇编语言目标代码(汇

脚本-关于百张表union问题,求sql大神

问题描述 关于百张表union问题,求sql大神 需求展示是这样的,根据一家企业的唯一id去遍历这个excel所有的表,一开始还算好做的,三个sheet分开union就行了,用java程序去评了一个sql,后面需求变成把联系人和电话放在一起,但是联系人的sheet和联系方式的excel并不是一一对应的,,而且可能一个表里有多个联系人,而联系方式少于联系人的,这样数据又不能精确配对了..'现在有没有什么办法不用手动去union,用类似我上面弄个脚本自动生成的方式 解决方案 先写一个程序,一次性将你