C++递归阶乘函数输入3返回6的执行逻辑及原因求解
C++递归函数运行结果答疑
首先明确结论:cout 并没有只打印第一个返回值,你对结果的误判来源于对递归调用返回逻辑的理解错误,这段代码里的s函数实际实现的是阶乘计算逻辑,传入3得到6是完全正确的结果。
递归调用完整流程拆解
你调用s(3)的完整执行顺序如下:
- 第一层调用
s(3):n≠0,需要先计算s(2)的结果再乘3,暂时不会返回 - 第二层调用
s(2):n≠0,需要先计算s(1)的结果再乘2,暂时不会返回 - 第三层调用
s(1):n≠0,需要先计算s(0)的结果再乘1,暂时不会返回 - 第四层调用
s(0):命中终止条件n==0,返回1 - 回代计算:
s(1) = s(0)*1 = 1*1 = 1s(2) = s(1)*2 = 1*2 = 2s(3) = s(2)*3 = 2*3 =6
最终cout打印的是s(3)经过完整递归计算后的最终返回值6,不存在只打印第一个返回值的情况。
理解误区说明
你之前误以为s(2)返回4,是错误地把s(n)的逻辑当成了n*n,但实际上代码里的逻辑是s(n-1)*n,s(n-1)的结果需要走完下层递归才能得到,不是直接等于n-1。
内容的提问来源于stack exchange,提问作者Joc380
相关产品推荐
相关产品推荐

