我需要一些帮助来理解这个递归函数。当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)
。
答案 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)
使用您需要的不同输入运行该函数以查看结果:
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
现在让我们手动扩展顶级
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
下面),n
为1
。这次是最后一次通话,s
剩余"1"
。
将回叫放回原来的回复,你得到"1"+"0"+"1"
。
答案 3 :(得分:0)
如果您希望它返回“01”,请更改if语句
这
if (n < 2)
到
if (n <= 2)