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

递归硬币计数器开发求助:无全局变量与循环实现的计数逻辑错误排查

解决递归硬币计数器的逻辑问题

我仔细看了你的代码,发现几个关键问题导致结果不符合预期,咱们一步步来修正:

核心问题分析

  • 返回语句逻辑错误:你写的return sum + coins(sum - 25);之后的return count++;永远不会执行,而且count是函数内的局部变量,每次递归调用都会重新初始化,根本起不到计数的作用。
  • 递归逻辑完全偏离需求:你需要的是「选1枚当前面值的硬币,计数加1,再加上剩余金额的递归结果」,但你现在返回的是sum + 递归结果,这完全不是计数的逻辑。
  • 缺少硬币记录逻辑:你的需求里还要输出选中的硬币面值(比如输入16时输出10 5 1),但原代码没有任何存储或输出硬币面值的逻辑。

修正后的代码实现

我们需要调整递归函数,让它返回硬币总数,同时用引用传递的vector来记录每次选中的硬币面值:

#include <iostream>
#include <vector>
using namespace std;

// 递归函数:返回硬币总数,同时通过引用记录选中的硬币
int coins(int sum, vector<int>& usedCoins) {
    // Base case 1:金额小于0,说明这条路走不通,返回0
    if (sum < 0) return 0;
    // Base case 2:金额刚好为0,不需要再选硬币,返回0
    if (sum == 0) return 0;

    // 优先选大面值硬币(贪心策略,符合你示例的输出)
    if (sum >= 25) {
        usedCoins.push_back(25);
        return 1 + coins(sum - 25, usedCoins);
    } else if (sum >= 10) {
        usedCoins.push_back(10);
        return 1 + coins(sum - 10, usedCoins);
    } else if (sum >= 5) {
        usedCoins.push_back(5);
        return 1 + coins(sum - 5, usedCoins);
    } else if (sum >= 1) {
        usedCoins.push_back(1);
        return 1 + coins(sum - 1, usedCoins);
    }
    // 理论上不会走到这里,防止编译警告
    return 0;
}

int main() { // 注意:main的返回类型应该是int,不是void
    int cents;
    vector<int> usedCoins;

    // 获取用户输入
    cout << "Enter an amount in cents: ";
    cin >> cents;

    // 调用递归函数
    int coinCount = coins(cents, usedCoins);

    // 输出结果
    cout << endl;
    for (int coin : usedCoins) {
        cout << coin << " ";
    }
    cout << endl << coinCount << " coins" << endl;

    return 0;
}

关键修正点说明

  1. 递归逻辑修正:每个分支返回1 + coins(sum - 面值, usedCoins),其中1代表当前选中的这枚硬币,加上剩余金额的递归计数结果,完全符合你需求的逻辑。
  2. 硬币记录:通过vector<int>& usedCoins引用传递,每次选中硬币就把面值存入vector,最后可以遍历输出。
  3. main函数规范:C++标准里main函数的返回类型必须是int,原代码的void main()不符合标准,已经修正。
  4. Base case调整:保持sum<0返回0(无效路径),sum==0返回0(无需再选硬币),逻辑正确。

测试结果

输入16美分时,程序会输出:

Enter an amount in cents: 16

10 5 1 
3 coins

输入37美分时,会输出:

Enter an amount in cents: 37

25 10 1 1 
4 coins

完全符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:42:27