簡體   English   中英

為什么此函數返回-3?

[英]Why does this function return -3?

當我嘗試使用此功能時,控制台的日志為-3,但是當我自己進行計算時,它似乎會返回12。這是為什么?

function func(x) {
  if (x <= 0) { 
    return x; 
  }
  return func(x - 5);
}
console.log(func(17));

因為返回時您會再次調用它

function func(x) { <-- x=17

if (x <= 0) { 
return x; 
}
 return func(x - 5); <---x=12 so now you call the func with 12
}
console.log(func(17));

第2步

function func(x) { <-- x=12

if (x <= 0) { 
return x; 
}
 return func(x - 5); <---x=7 you call with 7 
}
console.log(func(17));

第三步

function func(x) { <-- x=7

if (x <= 0) { 
return x; 
}
 return func(x - 5); <---x=2 you call with 2
}
console.log(func(17));

第四步

function func(x) { <-- x=2

if (x <= 0) { 
return x; 
}
 return func(x - 5); <---x=-3 you call with -3
}
console.log(func(17));

最后一步

function func(x) { <-- x=-3

if (x <= 0) { 
return x; <--- now you print the result
}
 return func(x - 5); 
}
console.log(func(17));

編輯:

遞歸函數是這樣的函數:它們在中斷條件為true之前一直調用它們,在您的示例中,中斷條件為x等於(=)或小於(<)小於0,然后打印結果。

第一個數字為17時,您會迷惑5,返回真斷點條件為-3

您調用它一次,然后只要值大於0,它就會繼續調用自身(在第二次返回時)。因此,它會一直進行直到值小於0,然后返回最終結果。

沒錯,您應該得到-3。 您的遞歸函數說,將x減5直到x小於或等於0。因此,第一次迭代將是12,然后是7,然后是2,最后是-3,它滿足小於或等於0的條件,然后返回X

當一個方法調用自身直到滿足特定條件時。在本示例中, func()方法將繼續調用自身,將x-5作為參數傳入,直到小於0,這時它將返回當前值的x 因此,調用棧將如下所示:

func(17)

is (17 <= 0)? No
func(17 - 5)

is(12 <= 0)? No
func(12 - 5)

is(7 <= 0)? No
func(7 - 5)

is(2 <= 0)? No
func(2 - 5)

is(-3 <= 0) Yes!
return -3

正如其他答案所說的那樣,它返回-3的原因是由於遞歸,而且是因為您從自身內部調用了該函數。

但是,如果您希望輸出為12 ,我還要添加我認為您嘗試編寫的代碼:

function func(x) {
  if (x <= 0) { 
    return x; 
  }
  return x - 5;
}
console.log(func(17)); // <---12

返回x時,無需引用func

暫無
暫無

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

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