2016-07-30 40 views
1

此代碼似乎在Java中工作,但是當我將它轉換爲Python時,它超過了最大遞歸深度並退出。不知道有什麼區別。他們看起來像他們的功能一樣。代碼適用於Java而不是Python?

Java版本:

public String addCommas(String number) 
{ 
    if(number.length < 4 
    { 
    return number; 
    } 
    return addCommas(number.subString(0, number.length - 3)) + "," + number.subString(number.length - 3, number.length); 
} 

Python版本:

def addCommas(number): 
    number = str(number) 
    if len(number) < 4: 
     return number 
    else: 
     return addCommas(number[:len(number) - 3] + ',' + number[len(number) - 3:]) 

提前任何幫助謝謝!

+1

刪除Java標記假設你不希望在Java的答案。 –

+0

你的括號是不同的。對'addCommas'的調用應該在'number [:len(number) - 3]'後面結束,但它不會。 'return addCommas(number [:len(number) - 3])+','+ number [len(number) - 3:]' –

+0

我現在感覺非常愚蠢,非常感謝您的時間! – BuggyLemon

回答

1

區別在最後一行。

return addCommas(number.subString(0, number.length - 3)) + "," + number.subString(number.length - 3, number.length); 

這要求addCommas僅在所述第一子串(這降低了字符串參數的長度爲3的下一個呼叫),然後追加一個逗號和最後三個數字到它的結果。

return addCommas(number[:len(number) - 3] + ',' + number[len(number) - 3:]) 

這從另一方面增加了第一個逗號,並呼籲整個新的字符串addCommas(這甚至超過原來的,導致無限遞歸循環)。

return addCommas(number[:len(number) - 3]) + ',' + number[len(number) - 3:] 

這工作,因爲它只是呼籲第一子addCommas並添加逗號的addCommas,以同樣的方式將Java代碼做它的結果。

0

所不同的是在最後一行

爪哇: 返回addCommas(number.subString(0,number.length - 3))+ 「」 + number.subString(number.length - 3,數。長度);

的Python: 返回addCommas(數[:LEN(數字) - 3] + '' +號[長度(數) - 3:])

不相同。如果你在java中觀察,你正在調用addCommas,然後附加逗號和一個字符串。而在python中,你只能調用addCommas函數。這將導致無限循環。就像在java中一樣。

回報addCommas(編號[:LEN(數字) - 3] + '' +號[LEN(數字) - 3:])

相關問題