这个学校的运动有什么问题?

时间:2014-06-07 00:35:38

标签: python python-2.7 recursion

在Pyschool递归练习中,有一个问题是打印两个参数之间的数字(包括那些)...我在递归时太弱了,但经过一定的尝试,我做到了这一点..但它仍然会抛出虽然预期结果和返回结果完全相同但是错误。

def numbersInbetween(a, b):
    if b == 0:
        return "Invalid"
    if a == b:
        return a
    else:

        return str(a)+ "," + str(numbersInbetween(a+1, b)) 

输出图像文件:

enter image description here

我甚至试过,在第二个if语句中对输出进行字符串格式化,但这只会引发错误,例如"检查代码中的无限循环"。

2 个答案:

答案 0 :(得分:3)

您在a时返回a == b,而不是str(a)。测试人员需要一个字符串,而是给它一个整数。

你可能 想要测试b 小于而不是a,否则你最终会无休止地递归(好吧,直到你达到递归限制):

if b < a:
    return "Invalid"

如果b = 0,该功能仍然有效提供的a小于或等于b numbersInbetween(5, 0)返回"Invalid"不是因为b0,而是因为b小于a;在这种情况下,当您增加a == b时,您永远不会达到a

确保您的函数始终返回一个字符串实际上简化了您的代码:

def numbersInbetween(a, b):
    if b < a:
        return "Invalid"
    if a == b:
        return str(a)
    else:
        return str(a) + "," + numbersInbetween(a + 1, b)

答案 1 :(得分:0)

将行如果 b == 0更改为,如果 b&lt; 0 b == 0

    def numbersInbetween(a, b):
        if b < a or b == 0:
            return "Invalid"
        if a == b:
            return str(a)  
        else:
            return str(a) + ',' + numbersInbetween(a+1, b)