2015-10-14 64 views
2

我在想如何使用遞歸來查找數字的補碼。 例如一個數字的每個數字x必須成爲9 - x,所以1234 -> 8765Java遞歸方法找到補全

我真的不知道該怎麼做。這是到目前爲止我的代碼:

public static int complement(int n){ 
    int x = n % 10; 
    x = x - 9; 
    n = (n/10) 
    return complement(n,x); 
} 

public static int complement(int n ,int times){ 

} 
+0

我不是確定爲什麼你要刪除問題的相關部分。它們非常重要,因爲它們顯示了當前的代碼,並且做出了這樣的努力。請不要破壞你的帖子(甚至一年的帖子),這個問題發生在過去。 – Tunaki

回答

5

當你在處理遞歸,它先寫algoritm英語(或者你的母語:))是非常重要的。

對於這個任務,考慮以下因素:

  • 我有一個數n。讓我們取最後一位數字並將此數字減去9.
  • 對於其餘數字,即n/10,再次執行此操作。得到的結果,我們需要再次編一個數字:所以我們將結果乘以10並添加我們之前計算的數字。換句話說,complement(n/10)返回數字n的補碼,沒有最後一位數字,所以我們需要在最後一位數字後加上補碼。
  • 當數字小於10時,我們沒有更多的事情要做,我們只能返回9 - n(這是基本情況,數字只有一位數字)。

在代碼中,這是實現爲:

public static int complement(int n) { 
    if (n < 10) { 
     return 9 - n; 
    } 
    int x = n % 10; 
    x = 9 - x; 
    return 10 * complement(n/10) + x; 
} 

然後:

System.out.println(complement(1234)); // prints 8765 

這可以被寫短一點:

public static int complement(int n) { 
    if (n < 10) { 
     return 9 - n; 
    } 
    return 10 * complement(n/10) + 9 - n % 10; 
}