[英]C++ Understanding recursive function
我需要一些幫助來了解此遞歸函數。 當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
+ 1
等於01
(因為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
的二進制表示形式。 基本上它寫入一個1
結尾,如果n
是奇數,以及一個0
,如果n
是偶數。 n/2
只是沒有最后一位數字的數字n
(以二進制表示)。
使用所需的不同輸入來運行函數,以查看結果:
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";
您的函數從5
開始,將s
保持為“ 1”,然后以n = 2
遞歸調用,並將s
變為"0"
,然后遞歸調用自身一次(因為2
不低於2
),其中n
為1
。 這次是最后一次通話, s
仍為"1"
。
將呼叫退回到原始呼叫,您將獲得"1"+"0"+"1"
。
如果您希望它返回“ 01”,請更改if語句
從
if (n < 2)
至
if (n <= 2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.