簡體   English   中英

C ++理解遞歸函數

[英]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 (以二進制表示)。

階段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";

您的函數從5開始,將s保持為“ 1”,然后以n = 2遞歸調用,並將s變為"0" ,然后遞歸調用自身一次(因為2 低於2 ),其中n1 這次是最后一次通話, s仍為"1"

將呼叫退回到原始呼叫,您將獲得"1"+"0"+"1"

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

if (n < 2)

if (n <= 2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM