代码适用于Java而不适用于Python?

时间:2016-07-30 09:42:39

标签: python recursion

这段代码似乎适用于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:])

提前感谢您的帮助!

2 个答案:

答案 0 :(得分: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代码一样。

答案 1 :(得分:0)

区别在于最后一行

Java: return addCommas(number.subString(0,number.length - 3))+&#34;,&#34; + number.subString(number.length - 3,number.length);

Python: return addCommas(number [:len(number) - 3] +&#39;,&#39; + number [len(number) - 3:])

不一样。如果你在java中观察到你正在调用addCommas,然后附加逗号和字符串。而在python中你只调用addCommas函数。这将导致无限循环。就像在java中一样。

返回addCommas(数字[:len(数字) - 3] +&#39;,&#39; +数字[len(数字) - 3:])