簡體   English   中英

如何在Java中編寫一個采用正整數或負整數並返回其具有的位數的遞歸方法

[英]How to write a recursive method in java that takes in a positive or negative integer and returns the number of digits it has

我正在嘗試解決此問題:編寫一個遞歸方法,該方法返回作為整數類型的參數傳遞給它的整數中的位數。 允許正面和負面的論點。 例如,-120有三位數字。

這是我的代碼,但是當我嘗試通過121時,我總是得到1:

public static int recursion(int inNumber){
    //create a counter variable for the total of digits
    int totalDigits = 0;
    //base case
    if (inNumber < -10 || inNumber > 10){
        totalDigits++;
        return totalDigits;
        //recursive case
    }else{
        totalDigits++;
        return recursion(inNumber/10) + totalDigits;
    }
}

使用Math.abs試試這個簡化的代碼

public static void main(String[] args) {
     System.out.println(recursion(123456, 0));
}   

public static int recursion(int inNumber, int totalDigits){

    totalDigits++;
    if (Math.abs(inNumber) < 10){
        return totalDigits;
    }else{
        return recursion(inNumber/10, totalDigits);
    }
 }

輸出

6

如果拿121,

int totalDigits = 0;
if (121< -10 || 121> 10){ // YES 121>10 then: 
    totalDigits++;
    return totalDigits;

您的邏輯檢查它是否大於10,然后返回totalDigits(1)。 你想做的是相反的。 如果大於10,則調用相同的功能。 基本上,您的if / else剛好相反。

每次調用方法時,都要重置totalDigits的值,作為遞歸調用的一部分,應該將totalDigits影響到函數中,代碼應為

public static int recursion(int inNumber) {
    //create a counter variable for the total of digits
    //base case
    if (Math.abs(inNumber)<10) {

        return 1;
        //recursive case
    } else {
        return recursion(inNumber / 10) + 1;
    }

}

所以這是我修復此代碼的方式:

1:解決邏輯錯誤,並使用邏輯否定使代碼更具描述性。

public static int recursion(int inNumber) {
    //create a counter variable for the total of digits
    int totalDigits = 0;
    //base case
    if (!(inNumber <= -10 || inNumber >= 10)) { //notice the !
        return totalDigits + 1;
    //recursive case
    } else {
        totalDigits++;
        return recursion(inNumber / 10) + totalDigits;
    }
}

優化1 :您也可以擺脫局部變量totalDigits因為它始終為1

public static int recursion(int inNumber) {
    //base case
    if (!(inNumber <= -10 || inNumber >= 10)) {
        return 1;
    //recursive case
    } else {
        return recursion(inNumber / 10) + 1;
    }
}

優化2 :您可以使用Math.abs(int)實現相同的Math.abs(int)

public static int recursion(int inNumber){
    if (Math.abs(inNumber) < 10) {           //base case
        return 1;
    } else {                                 //recursive case
       return recursion(inNumber / 10) + 1;
    }
 }

再次查看您的if條件。 121大於10,因此inNumber > 10的條件為true,執行totaldigits++ ,並且該方法返回1。

條件應if (inNumber > -10 && inNumber < 10)

暫無
暫無

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

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