递归计算数字各位相乘的C++代码无输出,该如何修复?
问题原因分析
- 核心问题是递归终止条件的执行顺序错误:你将
if(n==0) return 1;的终止判断写在了递归调用multi(n/10)之后,程序永远不会触发终止条件,会陷入无限递归最终触发栈溢出,程序异常退出因此没有任何输出。 - 传入1234时的错误执行路径为:调用multi(1234) → 先执行multi(123) → 先执行multi(12) → 先执行multi(1) → 先执行multi(0) → 先执行multi(0/10=0),无限循环调用multi(0),永远不会走到返回1的逻辑。
修正后的代码
#include<iostream> using namespace std; int multi(int n){ // 把终止判断放在递归调用之前,先判断是否到终止边界 if(n == 0) return 1; int smallanswer = multi(n / 10); int lastdigit = n % 10; return smallanswer * lastdigit; } int main(){ cout << multi(1234); // 输出结果为 1*2*3*4=24 }
可选优化点
- 如果需要处理输入为负数的场景,可以在函数开头加逻辑
if(n < 0) n = -n;,统一按正数计算各位乘积。 - 如果输入数字包含0数位(例如1024),代码会自动返回0,符合各位相乘的逻辑规则。
内容的提问来源于stack exchange,提问作者user16725951
相关产品推荐
相关产品推荐

