我非常复杂的功能(测试和工作):
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:])
平地机错了吗?我也欢迎任何关于哪些代码更好以及为什么(我怀疑我的代码不是)的评论。
由于
答案 0 :(得分:3)
评分者可能只是在寻找lenRecur(
在代码中出现两次,而不是采用一些复杂的方法来确定“重新递归”。虽然你的内部函数lenR()
是递归的,但外部函数却不是。
此外,您的代码错误地返回
lenRecur("") == 1
就哪个更好而言,示例仅在三行中实现了正确的结果,没有复杂的语法,这对他们有利。你的代码几乎完全相同,但以更迂回的方式。你永远不会改变n
的事实使它成为一个毫无意义的变量,只是让事情变得混乱(aStr[n+1:]
总是只有aStr[1:]
)。