c++图中代码有什么问题,编译器未报错

img

img


如图所示,我自己编写的代码有什么地方出现了问题,又有哪些地方可以优化
vs版本2022

你这里用循环就不用递归,用递归就不用循环,两个不能一起来啊

递归版本

#include <iostream>
using namespace std;

double fun1(int n)
{
    if (n == 1)
    {
        return 1;
    }
    else if (n % 2 == 0)
    {
        return -1.0 * n / (2 * n - 1) + fun1(n - 1);
    }
    else
    {
        return 1.0 * n / (2 * n - 1) + fun1(n - 1);
    }
}

int main()
{
    int n;
    cout << "请输入一个整数 n:";
    cin >> n;
    cout << "结果为:" << fun1(n) << endl;

    return 0;
}

循环版本

double fun1(int n)
{
    double sum = 0;
    int i = 1;
    while (i <= n)
    {
        if (i % 2 == 0)
        {
            sum -= i * 1.0 / (2 * i - 1);
        }
        else
        {
            sum += i * 1.0 / (2 * i - 1);
        }
        i++;
    }
    return sum;
}

你这写的有点恐怖,其实表达式很简单啊,分子是整数序列,分母是奇数序列。你是需要用循环,还是需要用递归?递归本身就是循环了

#include <stdio.h>
int main()
{
    int n,flag = 1;
    double res = 0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        res += flag * i*1.0/(2*i-1);
        flag = -flag;
    }
    printf("%lf",res);
}

递归


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double fun(int n)
{
    if(n==1)
        return 1;
    return pow(-1.0,n+1) * n/(2*n-1) + fun(n-1);
}
int main()
{
    int n;
    scanf("%d",&n);
    printf("%lf",fun(n));
    system("pause");
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^