[英]return statement is giving unexpected result during implementation of the method to find power of ten
我正在解決這樣一個問題:給我們一個整數,我們必須返回小於或等於給定int n值的10的最大冪。 我試圖解決它,但運行時間不符合預期。
public int powerofTen(int n){
int x;
if(n>0){
x = 1 + powerofTen(n/10);
}else{
return 0;
}
return x;
}
如果我替換了最后一個return x
,則用return (int)Math.pow(10,x-1)
語句來獲取正確的答案,顯示的值為0。此外,如果我嘗試使用return x-1
而不是int x
它顯示0。
間隙輸出:如果n = 100
return x
值為3。
return x-1
值為0。
使用return (int)Math.pow(10,x-1)
的值為0。
這根本與遞歸無關,該錯誤不在遞歸代碼中。 問題是您需要函數返回,例如:
對於輸入100,數字3可能返回(int)Math.pow(10,x-1)
。 如果將return x
替換為(int)Math.pow(10,x-1)
則在遞歸調用中將有錯誤的結果。 例如,您將使用輸入100調用該函數,該輸入將使用輸入10調用該函數,依此類推,但是您希望輸入10的函數調用返回到值1的外部調用。如果放置return x-1
(或(int)Math.pow(10,x-1)
)而不是返回x,那么對於輸入10,您將在遞歸中得到結果0,而不是1,因此對於輸入100,您也將獲得0。
錯誤是合乎邏輯的,為了解決問題,您需要找到指數,例如,輸入100的數字為3,然后返回(從函數外部) (int)Math.pow(10,x-1)
。
即使已經被回復,通過這種方式也更容易查看遞歸算法中的步驟:
基本情況:小於10的任何數字將返回0作為10的最大指數
遞歸任務:將n / 10的最大指數加1
一些代碼:
public int powerofTen(int n){
if(n<10)
return 1;
else
return 10*powerofTen(n/10);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.