當我通過輸入 2 運行此函式時,我不明白為什么它回傳 83 而不是 5,因為它應該在 else 陳述句中呼叫 function(1),然后應該執行 if 陳述句并且函式應該回傳 5。
public static int function(int y) {
if (y == 1)
return 5;
function(y - 1);
y = y 1;
return 83;
}
uj5u.com熱心網友回復:
它回傳 83 因為你沒有使用回傳值function(y - 1);
來測驗它嘗試:
public static int function(int y) {
if (y == 1)
return 5;
else {
int returnedValue = function(y - 1);
System.out.println("un used returned value: " returnedValue);
y = y 1;
return 83;
}
}
改成:
public static int function(int y) {
if (y == 1) return 5;
/*else*/
return function(y - 1);
}
uj5u.com熱心網友回復:
輸入:y = 2,
else 條件將被處理。
function(y - 1);//nothing impact to y
y = y 1;// y =3
return 83; // but finally return 83
你明白重點了嗎?
uj5u.com熱心網友回復:
由于您沒有 return function(y-1),該陳述句與使函式無效(對于該呼叫)一樣好。
因此,一旦控制到達 function(y-1) 并最終導致呼叫 function(1),您就會得到 5,但它不會回傳給驅動程式函式。相反,回傳的是值 83。
uj5u.com熱心網友回復:
看一下這個:
public static int function(int y) {
if (y == 1)
return 5;
function(y - 1); // you do not use return value
y = y 1;
return 83; // you always get this return
}
這意味著您可以將您的功能替換為:
public static int function(int y) {
return 83;
}
看起來你想做某事。像這樣:
public static int function(int y) {
return y == 1 ? 5 : function(y - 1);
}
但要小心,因為y < 1你會有無限遞回(StackOverflowError)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/384451.html
