2011-06-11 25 views
0
public static int recursiveReverse(int number, int reversenumber){ 

    if(number <= 0) { 
     return reversenumber; 
    } 

    reversenumber = reversenumber * 10 + (number % 10); 
    number = number/10; 

    return recursiveReverse(number, reversenumber); 
} 

OR遞歸方法哪個更好,爲什麼對整數的反向數字?

private static int reversenumber = 0; 

public static int recursiveReverse(int number){ 

    if(number <= 0) { 
     return reversenumber; 
    } 

    reversenumber = reversenumber * 10 + (number % 10); 
    number = number/10; 

    return recursiveReverse(number); 
} 
+1

如果顛倒'200'變得'2'我想這是因爲功課,我會用一個字符串,而不是使用遞歸。 – 2011-06-11 17:31:23

+0

在將它當作字符串對待之前,不應該將該數字轉換爲字符串嗎? – DavidO 2011-06-11 17:33:50

+0

@彼得:你認爲應該是什麼? – 2011-06-11 17:35:24

回答

5

絕對最後一個。把一個狀態保持變量放在一個靜態字段中只是在尋求麻煩。並不是說你必須爲併發設計,但是如果你有多個線程運行這個代碼,例如共享的reverseNumber字段會完全破壞一切。

我沒有看到第一個和第二個之間的任何區別。 (從字面上看,他們似乎等同於我)

如果你的目標是通過具有用於第二個參數(reverseNumber)的默認值,以簡化調用約定,然後只需超載方法:

public static int recursiveReverse(int number) { 
    return recursiveReverse(number, 0); 
} 

private static int recursiveReverse(int number, int reverseNumber) { 
    // your code goes here 
} 
+1

你很明顯,第一個有'int number,int reversenumber',而第二個只有'int number,int reversenumber'。 – Eric 2011-06-11 17:38:26

2

我看不到第一和第二個例子

之間的差異,但在第三個例子使用靜態變量是危險的(你需要每次都重新設置它,它不是線程安全的)

1

有以下一去:

public int rev(int n){ 
    if(n <= 0) { 
     return n; 
    } 
    return Integer.parseInt("" + (n % 10) + rev(n/10)); 
} 

這樣你就不需要一個臨時變量來保持狀態並且它滿足返回類型。 希望這有助於! :)

2

我認爲條件(n < = 0)在最後增加了額外的0。與10(N < = 10)相比返回正確逆轉整數

public int rev(int n){ 
    if(n <= 10) { 
     return n; 
    } 
    return Integer.parseInt("" + (n % 10) + rev(n/10)); 
} 
相關問題