2017-02-21 70 views
0

所以我知道我會怎麼去寫,將簡單地打印出轉換器整數轉換成二進制這樣的功能:將整數轉換爲二進制字符串的遞歸函數?

private void convertBinary(int num) { 

    if(num > 0){ 

     convertToBinary(num/2); 

     System.out.print(num%2 + ""); 

    } 
} 

但是,我不知道我會怎麼做,如果我想回它作爲一個字符串,特別是遞歸,因爲如果我初始化字符串作爲方法的開始,它將在每次遞歸調用期間重置字符串。

+3

您首先更改返回'String'的方法,然後在遞歸調用中捕獲返回值。現在您已經從遞歸調用中獲得了價值,您可以追加它,而不是打印。一次只能一步一步看到你身在何處。 – Andreas

+0

可能重複的[轉換十進制到二進制Java](http://stackoverflow.com/questions/14784630/converting-decimal-to-binary-java) – Prune

+0

這不是一個騙局(至少,不是這樣) - 它是一個「幫助我學習遞歸」的問題。 – slim

回答

0

忠告1:函數名... ConvertToBinary VS ConvertBinary
忠告2:你的結果將被還原這種方式(LSB左)
忠告3:從轉換得到的返回值和N%2它串聯作爲輸出

但是你足夠接近。

順便說一句,這是爲了一些教育目的?遞歸對於將某些東西轉換爲二進制是相當低效的:)

0

而不是給你代碼你可以複製/粘貼,我會解決類似的問題,你可以應用相同的技術。

這裏是print版本的遞歸打印 'A' n時間:

void printTimes(int n) { 
     if(n > 0) { 
      printTimes(n-1); 
      System.out.print("A"); 
     } 
    } 

現在,這裏是一個返回String版本:

String stringTimes(int n) { 
     if(n > 0) { 
      return stringTimes(n-1) + "A"; 
     } else { 
      return ""; 
     } 
    } 

這應該幫助你寫你的toBinary方法。


雖然這是接近你原來的,我喜歡在我的遞歸方法相一致,在第一次處理終止條款,所以更喜歡:

String stringTimes(int n) { 
     if(n == 0) { 
      return ""; 
     } 

     return stringTimes(n - 1) + "A"; 
    } 

需要注意的是遞歸只適用於Java中的這個特定問題,用於學習目的。

0
class Class { 

    public static void main(String... args) { 
    System.out.println(intToBinary(1)); 
    System.out.println(intToBinary(8)); 
    System.out.println(intToBinary(15)); 
    System.out.println(intToBinary(1234567)); 
    } 

    private static String intToBinary(final int i) { 
    if (i == 0) { 
     return ""; 
    } else { 
     return intToBinary(i/2) + Integer.toString(i % 2); 
    } 
    } 
} 
相關問題