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

C++递归函数出现Stack overflow错误及结果异常求助

递归函数栈溢出及结果异常的原因分析

一、栈溢出(Stack overflow)的直接原因

你的递归调用陷入了无限递归,直接耗尽栈空间:

  1. 调用factorialNumber(a,b)时传入的参数是a=8、b=1,函数终止条件设为if(b==a)。
  2. 递归调用语句factorialNumber(b + 1,a)完全搞反了参数顺序——函数定义的第一个参数是a,第二个是b,所以每次递归时,新的a是b+1,新的b是原来的a(固定为8)。
  3. 第一次调用是(8,1),下一次变成(2,8),再下一次是(9,8),之后会持续变成(10,8)、(11,8)……b永远等于8,a却不断增大,永远满足不了b==a的终止条件,递归无限执行直到栈被撑爆,触发栈溢出错误。

二、sum结果为1的原因

  1. main函数定义不符合C++标准:标准main函数的签名应为int main()或int main(int argc, char* argv[]),你写的void main(int sum)是非法的,这里的sum参数未被正确初始化,它的值是栈上的随机垃圾值,出现1只是巧合。
  2. 你调用factorialNumber后没有接收返回值,cout输出的sum是main函数的参数,和递归函数里的sum毫无关联。

三、额外的逻辑错误

从函数名factorialNumber来看,你应该是想实现阶乘计算,但当前逻辑完全错误:阶乘是连续相乘(比如8! = 1×2×3×…×8),而你的代码是sum = a*b再加上递归返回值,完全偏离了阶乘的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:36:34