从c ++中的伪代码实现算法

时间:2016-07-18 03:46:33

标签: c++ algorithm pseudocode

我试图从以下伪代码enter image description here

实现Change问​​题的递归算法

但我不知道如何正确实现它,我的目标是学习如何阅读伪代码而不是如何解决变更问题。

这是我在c ++中的代码

int recChange(int money){
    int coins [6] = { 50, 25, 20, 10, 5, 1 };

    if (money == 0) return 0;

    int minNumberCoins;

    for (int i=0; i < 6; ++i){
        if (money >= coins[i]) {
            int numberCoins = recChange(money - coins[i]);

            if (numberCoins + 1 < minNumberCoins ){
                minNumberCoins = numberCoins + 1;
            }
         }
     }
     return minNumberCoins;
}

3 个答案:

答案 0 :(得分:3)

伪代码:

MinNumCoins ← ∞

这表示&#34;将MinNumCoins初始化为无穷大&#34;。

您的等效代码:

int minNumCoins;

这声明minNumCoins,但保留未初始化。这不仅不是伪代码所说的,而且由于代码随后使用了未初始化的变量,因此会导致未定义的行为。

实现此伪代码有两种基本方法:

1)使用第二个变量,指示是否已设置该值。将变量初始化为无穷大的目的是找到为其计算的最小值。在每次尝试时,计算MinNumCoins的潜在候选值,如果它小于MinNumCoins的当前值,则新值将替换它。 MinNumCoins最终具有为其计算的最小值。

通过使用正无穷大初始化变量,可以获取MinNumCoins的第一个计算值并设置它(因为第一个计算值总是小于无穷大)。

替换逻辑使用第二个变量(标志)来指示是否已设置该值。如果不是,则无论它是什么,都会设置该值;但如果已设置变量,则代码会像往常一样将其与新计算值进行比较,如果计算值小于现有值,则更新它。

2)第二种方法是将变量初始化为最高可能值。 &#34;无穷大&#34;没有价值,int可以设置为。最接近的候选者将是int可能设置的最高最大值。这将是:

#include <limits>

int MinNumCoins = std::numeric_limits<int>::max();

这是否有点&#34; hack&#34;对你的问题来说是一个可接受的解决方案,你可以自行决定。

答案 1 :(得分:1)

而且,“退出所有(!)这个......(咳咳)......”

......并可能因此揭示我的年龄 ......(koff)......

...请记住,“伪 - 代码”只是(!!)曾经打算成为:“a(非常精确......)意味着两个人类可能希望彼此表达一种算法。“

当两个人类选择描述“伪代码”中的特定算法时,他们之间隐含地理解他们已选择根据特定编程(语言或语言)进行通信这两个人都是相互认识的。“但是,这应该延伸到意味着”他们之间有任何直接1:1的对应关系正在说“和”实际的计算机源代码。“

答案 2 :(得分:0)

嗯,我在这里看到的一个问题是你已经宣布了minNumber硬币,但你还没有专门将它初始化为任何数字。因此,它在开始时将具有值0(零),并且在将其与正数进行比较时,它将永远不会返回true,因为它不大于正数。这就是为什么你的程序无法正常工作的原因。我没有看到实现伪代码的任何其他问题。你已经完成了它。祝你好运:)