【问题标题】:Coin change problem in C++ stuck on recursionC ++中的硬币找零问题卡在递归上
【发布时间】:2022-11-19 04:45:59
【问题描述】:

我必须为 C++ 中的硬币找零问题编写递归解决方案。 该问题提供了一组不同价值的硬币和一个代表要支付的金额的价值。 该问题要求根据手头的硬币提供支付款项的方式的数量。

我坚持这个:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

long recursive(int amount, vector<long>& input_vector, long ways, vector<long>::const_iterator current) { 
    if (amount < 0)
        return ways;
    for (auto iter = current; iter != input_vector.end(); ++iter) {
        cout << "amount: " << amount << ", current coin: " << *iter << '\n';
        ways += recursive(amount - *iter, input_vector, 0, iter);
        cout << "ways: " << ways << '\n';
    }
    return ways;
}

long getWays(int n, vector<long> c) {
    sort(c.begin(), c.end(), greater<long>());
    
    return recursive(n, c, 0, c.begin());
}

int main() {
    int amount = 32;
    vector<long> coinages = {2, 5, 6, 10};
    
    cout << "Solution is: " << getWays(amount, coinages) << endl;
    
    return 0;
}

答案应该是 27,但我得到 0? 即使我在主程序末尾省略了eturn 0,我仍然得到0。 所以我有点沮丧我的逻辑在这里不起作用而且我对如何以不同的方式解决这个问题一无所知。

【问题讨论】:

  • 您所有的代码路径都将 ways 保留在它接收到的 0 处,因此没有任何东西可以增加它
  • 你好,谢谢。当我使用硬币时它变成矢量 c
  • 不,我在递归函数中递增方式
  • 然而 cout &lt;&lt; "ways: " &lt;&lt; ways &lt;&lt; '\n'; 总是打印 0 - 所以我会声称你声称它是递增的是错误的
  • 如果您总是为 ways 传递 0,那么传递它有什么意义呢?

标签: c++ recursion


【解决方案1】:

如果amount 为 0,则这是一个答案,return 1 将添加到 ways。如果您低于 0,死胡同,return 0,则不会添加任何内容。

if (amount == 0)
    return 1;
if (amount < 0)
    return 0;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多