这是一个正确的递归调用吗?函数调用自身,但Edx分级器没有看到它

时间:2014-01-01 23:02:26

标签: python recursion

我非常复杂的功能(测试和工作):

def lenRecur(aStr):
    '''
    aStr= a string
    return length of aStr
    '''
    lenn=1
    n=0
    def lenR(aStr,Lenn,n):
        if aStr[n+1: ] == '':
            return 1
        else:
            Lenn=Lenn + lenR(aStr[n+1:],Lenn,n)
            return Lenn
    return lenR(aStr, lenn, n)

在拒绝代码时,edX分级器要求我使用递归调用,即使我相信我使用了递归。

这是他们的代码:

def lenRecur(aStr):
    '''
    aStr: a string

    returns: int, the length of aStr
    '''
    # Base case: When aStr is the empty string,
    #  its length is zero.
    if aStr == '':
        return 0

    # Recursive case: If the string is not zero-length, then remove the first
    #  character and the length is 1 + the length of the rest of the string
    return 1 + lenRecur(aStr[1:])

平地机错了吗?我也欢迎任何关于哪些代码更好以及为什么(我怀疑我的代码不是)的评论。

由于

1 个答案:

答案 0 :(得分:3)

评分者可能只是在寻找lenRecur(在代码中出现两次,而不是采用一些复杂的方法来确定“重新递归”。虽然你的内部函数lenR()是递归的,但外部函数却不是。

此外,您的代码错误地返回

lenRecur("") == 1

就哪个更好而言,示例仅在三行中实现了正确的结果,没有复杂的语法,这对他们有利。你的代码几乎完全相同,但以更迂回的方式。你永远不会改变n的事实使它成为一个毫无意义的变量,只是让事情变得混乱(aStr[n+1:]总是只有aStr[1:])。