小题目代码修改(牛顿法求cosx-x=0)

wangyangtao 2009-02-02 04:30:35
题目:
已知f(x)=cos(x)-x.x的初始值是3.14159/4,用牛顿法求解f(x)=0的近似值.要求精确到10的-6次.f(x)的牛顿法为
Xn+1=Xn-(cos(Xn)-Xn)/(sin(Xn)-1)

我是这么写的:
#include "stdafx.h"

#include <iostream>
#include <math.h>
using namespace std;

double f(int);
int n;

void main()
{
cin>>n;
if(((cos(f(n))-f(n))-f(n))<10e-6)
cout<<f(n)<<endl;
}

double f(int n)
{
if(n==1)
return 3.14159/4;
else
return f(n-1)-(cos(f(n-1))-f(n-1))/(sin(f(n-1))-1);
}

程序没有错误 但我输入0的时候就说stack overflow 这是为什么 我该怎么改?
...全文
1189 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangyangtao 2009-02-03
  • 打赏
  • 举报
回复
ok 明白了 呵呵
waizqfor 2009-02-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wangyangtao 的回复:]
我在if(n==1)
后面添加
if(n <1)
cout < <"请输入大于等于1的整数" < <endl;
执行后,输入0,为什么出现三句 请输入大于等于1的整数??
[/Quote]
MS你if条件里调用了3次的f函数
if(((cos(f(n))-f(n))-f(n)) <10e-6)
所以出现连续3个输出语句
wangyangtao 2009-02-02
  • 打赏
  • 举报
回复
我在if(n==1)
后面添加
if(n<1)
cout<<"请输入大于等于1的整数"<<endl;
执行后,输入0,为什么出现三句 请输入大于等于1的整数??
great3779 2009-02-02
  • 打赏
  • 举报
回复
楼主是不是要做压力测试? 你的递归结束条件里面,并没有对n == 0的情况做处理,当然会导致堆栈溢出哦! 请增加对这种情况的结束处理吧~~~
hai040 2009-02-02
  • 打赏
  • 举报
回复
f的参数n的意义是迭代次数
ljmscsq 2009-02-02
  • 打赏
  • 举报
回复
出口是n==1,你输入0当然不行。应该输入>=1的数
waizqfor 2009-02-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 wangyangtao 的帖子:]
题目:
已知f(x)=cos(x)-x.x的初始值是3.14159/4,用牛顿法求解f(x)=0的近似值.要求精确到10的-6次.f(x)的牛顿法为
Xn+1=Xn-(cos(Xn)-Xn)/(sin(Xn)-1)

我是这么写的:
#include "stdafx.h"

#include <iostream>
#include <math.h>
using namespace std;

double f(int);
int n;

void main()
{
cin>>n;
if(((cos(f(n))-f(n))-f(n)) <10e-6)
cout < <f(n) < <endl;
}

double f(int n)

[/Quote]
我拿你程序试了一下 到没提示你说的stack overflow溢出 不过就是没有结果 1 2 3的时候有 到4就没有了
LS说的哪个原因对 因为你0传进来 怎么-1也到不了n==1的情况 只能无限的递归
hai040 2009-02-02
  • 打赏
  • 举报
回复
f的递归出口是if(n==1),n从0一直减,到不了1

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧