2010-11-08 69 views
0

這裏是我的問題:遞歸方法施工

編寫一個叫做binaryToDecimal遞歸方法。該方法應該將一個二進制位串轉換爲一個10位整數。示例調用從我們RecursionExamples類的對象將是

answer = example.binaryToDecimal("101111") 

的整數返回是47

我需要幫助來解決這個問題去。我知道這將是一個if-else循環,但如何去實現它讓我感到驚訝。 (這是日食環境)。

+6

你應該表現出到目前爲止你已經嘗試過的東西。另外,「我知道這將是一個for-else循環......」如果它需要遞歸,可能不會。 – 2010-11-08 00:23:29

回答

1

你想要做的很簡單:

  1. 的退出條件的思考 - 什麼是最原子串它可以處理。如果您的方法在空字符串上返回適當的錯誤,則獎勵積分。
  2. 想想如何使用遞歸函數。如果您忽略用於提取lastDigit和restOfString的代碼,Reese已經發布了一個很好的解決方案。

這裏是一個更類似Java的僞代碼,沒有透露太多:

public int binToDec(String binary) 
    { 
     if (end_conditions) return int 
     int lastDigit = Integer.process 
     String restOfString = binary.substring 

     return lastDigit + 2* binToDec(restOfString); 
    } 
+0

感謝你們倆的幫助。這些遞歸方法bug我 – 2010-11-08 01:11:14

2

如果你想解決它的遞歸,考慮一個二進制字符串,你可以將它轉換爲一個整數,通過基於最右邊的數字加上1或0,基於字符串的其餘部分增加2倍這個函數。

它看起來像這樣的僞

// input is an integer of 1's and 0's 
def f(int binaryString): 
    int lastDigit = binaryString % 10 // Get the last digit 
    int restOfString = binaryString/10 // Remove the last digit 

    return lastDigit + (2 * f(restOfString)) // add the last digit to twice f 
              // applied to the rest of the string 

您還可以檢查時,字符串的其餘部分都消失殆盡的最終條件,但是這是對基本邏輯方法。

+0

我不完全確定如何在我的方法中使用這個。 – 2010-11-08 00:41:35

+0

這是怎麼回事?這是你試圖編寫的方法,只是它是僞代碼,而不是java,你希望輸入字符串不是整數,所以要麼將其轉換爲數字,要麼使用String的'substring'方法來實現語義目標。 – 2010-11-08 00:43:51

+0

我會發布我很快想到的 – 2010-11-08 00:55:02

1
int binaryToDecimal(String s){ 
    if (s.isEmpty() || Integer.parseInt(s)==0){ // It's a little weird because the only 
    return 0;         // argument is a String. 
    } 
    else{ 
    int number = Integer.parseInt(s); 
    int lastDigit = number % 10; 
    int remainder = number \ 10; 
    return lastDigit + 2 * binaryToDecimal(String.valueOf(remainder)) 
    } 
} 
+0

我要指出的是,提供一個工作解決方案的作業問題是不好的形式。然後我看了一下代碼。 :-) – 2010-11-08 01:49:28

+0

感謝您的提示。 :) – 2010-11-08 02:00:33