簡體   English   中英

return語句在執行方法以發現十的冪時給出了意外結果

[英]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)

即使已經被回復,通過這種方式也更容易查看遞歸算法中的步驟:

  1. 基本情況:小於10的任何數字將返回0作為10的最大指數

  2. 遞歸任務:將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.

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