2016-07-30 41 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:])

相关问题