C++递归函数出现Stack overflow错误及结果异常求助
递归函数栈溢出及结果异常的原因分析
一、栈溢出(Stack overflow)的直接原因
你的递归调用陷入了无限递归,直接耗尽栈空间:
- 调用
factorialNumber(a,b)时传入的参数是a=8、b=1,函数终止条件设为if(b==a)。 - 递归调用语句
factorialNumber(b + 1,a)完全搞反了参数顺序——函数定义的第一个参数是a,第二个是b,所以每次递归时,新的a是b+1,新的b是原来的a(固定为8)。 - 第一次调用是
(8,1),下一次变成(2,8),再下一次是(9,8),之后会持续变成(10,8)、(11,8)……b永远等于8,a却不断增大,永远满足不了b==a的终止条件,递归无限执行直到栈被撑爆,触发栈溢出错误。
二、sum结果为1的原因
main函数定义不符合C++标准:标准main函数的签名应为int main()或int main(int argc, char* argv[]),你写的void main(int sum)是非法的,这里的sum参数未被正确初始化,它的值是栈上的随机垃圾值,出现1只是巧合。- 你调用
factorialNumber后没有接收返回值,cout输出的sum是main函数的参数,和递归函数里的sum毫无关联。
三、额外的逻辑错误
从函数名factorialNumber来看,你应该是想实现阶乘计算,但当前逻辑完全错误:阶乘是连续相乘(比如8! = 1×2×3×…×8),而你的代码是sum = a*b再加上递归返回值,完全偏离了阶乘的逻辑。
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

