用递归调用计算和编程计算f(x) 的一些问题处理

本文探讨了两个经典的递归编程问题:一是修正了一个用于计算特定级数和的递归函数错误;二是实现了一个计算无穷级数直到指定精度的程序。通过具体的C/C++代码示例,展示了如何有效地使用递归来解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题1:用递归调用计算1/2+2/3+3/4...+n/(n+1),哪里错了呢?


代码如下:


#include<iostream>
using namespace std;
double fun(int n)
{
double s;
if(n=0)
s=0;
else
    s=fun(n-1)+n/(n+1);
return s;
}
void main()
{
int n;
cin>>n;
cout<<fun(n);
}




正确的代码是这样子:

#include<iostream>
using namespace std;
double fun(int n)
{
  int m=1;
  if(n == m)
    return n / (n + 1.0);
  else
    return fun(n - 1) + n / (n + 1.0);  //用1.0而不是1,转换,否则结果为0
}
int main()
{
  int n;
  cin >> n;
  cout << fun(n);
  return 0;
}






问题2:编程计算f(x) = 1+x+x^2+x^3+...+x^n,要求最后一项的精度为0.0001. (-1<x<1),怎么弄呢?


回答2:


#include <stdio.h>
#include <math.h>
int main()
{
 int i=0;
    double s=0,ds,x;
    scanf("%lf",&x);
    do {
         ds=pow(x,i);
         s+=ds;
         i++;
    } while(abs(ds)>0.0001);
    printf("%lf\n",s);
    return 0;
}






补充:1<x<1,这个是程序的输入条件,可以不在程序中体现,也就是在测试输入时,输入的数据在-1到1之间。


疑问:n是未知的,那怎么求结果?


补充:这个是较简单的C程序,用的是C的基本结构和函数,你的n是未知的,而结束的条件是当X^n<0.0001时,所以n的值是在计算中得到的而不是预先设定的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值