奔跑的小火鸡 2024-04-27 18:23 采纳率: 16.7%
浏览 8

这道力扣入门题用递归为什么会RE

为什么用递归会RE

img

代码如下:



double search(int k,double sum ,double i);

void my_printf(double n);

int main()
{
    int k;
    cin >> k;
    search(k,0,1);
}

void my_printf(double n)
{
    cout << n-1 << endl;
}

double search(int k, double sum, double i)
{
    sum += 1 / i;    
    i++;
    if (sum > k)
    {
        my_printf(i);
    }
    else
    return search(k, sum, i);
}
  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2024-04-27 18:23
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    图片内容

    图片中的内容是洛谷在线题库的一道编程题目,题目编号为P1035,属于NOIP2002普及组的题目。题目要求计算出一个最小的正整数n,使得级数求和的结果( S_n )大于等于给定的整数k。

    问题概括

    这个问题是关于解决一个数学级数求和的问题,具体来说,是要求找到一个最小的正整数n,使得级数求和的结果( S_n )大于等于给定的整数k。

    问题出现原因

    递归调用在C++中可能会导致栈溢出(Stack Overflow),尤其是当递归深度过大时。在这个问题中,递归函数search没有正确地终止,因为它缺少一个基础条件来结束递归。此外,递归的效率通常较低,因为它需要重复计算相同的值。

    问题解决方案

    为了解决这个问题,我们可以采用非递归的方法,使用循环来迭代地增加级数的和,直到它大于或等于k。这样可以避免递归可能导致的栈溢出问题,并且通常更高效。

    提供代码

    下面是一个使用非递归方法解决这个问题的C++代码示例:

    #include <iostream>
    using namespace std;
    
    int main() {
        int k;
        cin >> k;
        double sum = 0.0;
        double i = 1.0;
        while (sum < k) {
            sum += 1 / i;
            i++;
        }
        cout << i - 1 << endl;
        return 0;
    }
    

    代码运行方式

    这段代码可以在任何支持C++的编译器上运行,如GCC或Clang。用户需要将代码复制到一个文本文件中,保存为.cpp扩展名,然后使用编译器编译并运行。

    代码预期运行结果

    如果输入是1,那么输出应该是2,因为最小的n使得( S_n \geq k )是2。

    推荐相关链接

    请注意,上述代码和解决方案是基于您提供的问题描述和图片内容进行的分析。如果有更具体的错误信息或者需要进一步的帮助,请提供更多的细节。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月27日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?