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

递归计算数字各位相乘的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:06:04