C ++了解递归函数

时间:2014-12-10 20:15:27

标签: c++

我需要一些帮助来理解这个递归函数。当101 = n时,它会返回5,但我不明白为什么。这是功能:

string RecursiveMystery(int n) {
  string s = "1";
  if (n % 2 == 0) {
    s = "0";
  }
  if (n < 2) {
    return s;
  }
  return RecursiveMystery(n / 2) + s;

所以当RecursiveMystery(5)时,它应该进入结束返回函数RecursiveMystery(5 / 2),它等于0 + 1 01(因为{{在s时的1}} = 1。我一直在理解它仍在返回RecursiveMystery(5)

4 个答案:

答案 0 :(得分:5)

如果您致电RecursiveMystery(5),则会返回RecursiveMystery(2) + "1"。所以我们必须评估RecursiveMystery(2),它返回RecursiveMystery(1) + "0"RecursiveMystery(1)返回`&#34; 1&#34;。

因此

RecursiveMystery(5) = RecursiveMystery(2) + "1" = RecursiveMystery(1) + "0" + "1" = "1" + "0" + "1" = "101"

关于RecursiveMystery - 方法的更多信息。它计算数字n的二进制表示。基本上,如果1为奇数,则会在末尾写n;如果0为偶数,则会写n。而n/2只是数字n,没有最后一位(以二进制表示)。

答案 1 :(得分:1)

第1阶段:

使用您需要的不同输入运行该函数以查看结果:

RecursiveMystery(5)
    return RecursiveMystery(2) + "1";   // Gets to recursive call

// So look at what RecursiveMystery(2) does
RecursiveMystery(2)
    return RecursiveMystery(1) + "0";   // Gets to recurive call

// So look at what RecursiveMystery(1) does
RecursiveMystery(1)
    return "1";                         // Return early as n < 2

第2阶段

现在让我们手动扩展顶级

    RecursiveMystery(5)
        return RecursiveMystery(2) + "1";

=>   RecursiveMystery(5)
        return RecursiveMystery(1) + "0" + "1";

=>   RecursiveMystery(5)
        return "1" + "0" + "1";

=>   RecursiveMystery(5)
        return "101";

答案 2 :(得分:0)

您的功能从5开始,并将s保持为“1”,然后使用n = 2递归调用,并将s变为"0",然后再次递归调用自身(因为2 2下面),n1。这次是最后一次通话,s剩余"1"

将回叫放回原来的回复,你得到"1"+"0"+"1"

答案 3 :(得分:0)

如果您希望它返回“01”,请更改if语句

if (n < 2)

if (n <= 2)