You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归打印递增数字代码输入超10^5失效,求原因及10^7级解决方案

问题分析
  • 递归栈溢出:你的递归实现会为每个printno调用分配栈帧,C++默认线程栈空间通常仅1~8MB。当输入n>1e5时,递归深度达到1e5层,累计栈帧大小超出栈容量,直接触发栈溢出导致程序崩溃。
  • 递归性能瓶颈:即使栈空间足够,递归调用的函数开销对于1e7级别的输入来说会被无限放大,程序运行效率极低,完全无法满足需求。
修改方案

1. 替换为循环实现

彻底规避递归栈的限制,循环仅占用单个栈帧,无论n多大(只要能存储变量)都能稳定运行。

2. 优化IO效率

打印1e7个数字时,默认cout因与C标准IO同步导致速度极慢,必须关闭同步以提升输出性能。

修改后的代码:

#include <iostream>
using namespace std;

int main() {
    // 关闭IO同步,大幅提升cout速度
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    long long n;
    cin >> n;
    // 循环实现递增打印
    for (long long i = 1; i <= n; ++i) {
        cout << i << '\t';
    }
    return 0;
}

额外说明

  • 移除了#include<bits/stdc++.h>,仅保留必要的<iostream>头文件,减少编译开销。
  • 使用字符字面量'\t'替代字符串字面量"\t",进一步提升输出效率。
  • 若仅为学习递归需保留逻辑,可尝试设置平台相关的栈大小(如Windows用/STACK链接选项、Linux用ulimit -s),但该方法仍无法支持1e7级别的递归深度,不推荐。

内容的提问来源于stack exchange,提问作者kalki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:05:23