C++ 理解递归函数

标签 c++

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

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 + 101(因为在 RecursiveMystery(5)< 时 s = 1/)。我无法理解它是如何返回 101 的。

最佳答案

如果您调用 RecursiveMystery(5),它会返回 RecursiveMystery(2) + "1"。所以我们必须评估 RecursiveMystery(2),它返回 RecursiveMystery(1) + "0"RecursiveMystery(1) 返回“1”。

因此

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

关于 RecursiveMystery 方法的更多信息。它计算数字 n 的二进制表示。如果 n 是奇数,它在最后写一个 1,如果 n 是偶数,它在最后写一个 0 .而 n/2 只是数字 n 没有最后一位(二进制表示)。

关于C++ 理解递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27410010/

相关文章:

c++ - 错误 : No matching function found

c++ - 如何传递 ostream 对象?

c++ - 仅在监听套接字上使用选择?

c++ - 三元运算符 ? : vs if. ..否则

c++ - 为什么 []mutable{} 不编译?

C++ 类工厂宏

c++ - 主线程等待 std::async 完成

c++ - 为什么数组中存储了额外的数据?

c++ - 在另一个类的成员函数中从成员函数启动线程

c++ - boost (反)序列化派生对象的 vector ,使用删除函数(unique_ptr)