我想知道标题中的内容。例如。如何计算递归循环并最终返回或打印结果。
这是我的代码,但它无法正常运行:
def lenRecur(aStr):
number = 0
print "lenRecur number is ", number
'''
aStr: a string
returns: int, the length of aStr
'''
if aStr == '':
return 0
else:
print aStr
number += 1
print "else number is ", number
return lenRecur(aStr[:-1])
好的,所以当我写作时,我再次测试并且它有效,如果我使用lenRecur(“word”,0)并且还自定义我的代码它有效。问题是,它是不合法允许的。这是不合法的,我不被允许这样做:(
所以定制代码:
def lenRecur(aStr, number):
print "lenRecur number is ", number
'''
aStr: a string
returns: int, the length of aStr
'''
if aStr == '':
return number
else:
print aStr
number += 1
print "else number is ", number
return lenRecur(aStr[:-1], number)
答案 0 :(得分:1)
我认为len
的递归版本远非效率最高,但是如果你想这样做,你应该使用辅助函数来隐藏第二个参数:
def lenRecur(aStr):
'''
aStr: a string
returns: int, the length of aStr
'''
# place the doc string next to the `def`
# the outside world has no ability to accidentally set the parameter
def lenRecurHelper(aStr, num = 0):
print "lenRecur number is ", number
# empty strings are falsy, so just test for that.
if not aStr:
return num
print aStr
lenRecurHelper(aStr[:-1],num + 1)
return lenRecurHelper(aStr)
答案 1 :(得分:1)
如果我理解正确,这可以解决您的问题:
def lenR(s,n=0):
if s:
return lenR(s[:-1],n+1)
else:
return n
#testing it:
lenR('this code is not pretty') # output: 23
lenR('egg') # output: 3
lenR('spam') # output: 4
它不漂亮,但通过递归计算字符串的长度也不是很好。
答案 2 :(得分:-1)
我相信你的意图是使用number
作为静态函数变量。这可以通过这种方式实现:
def lenRecur(aStr):
if not hasattr(lenRecur, 'number'):
lenRecur.number = 0
print "lenRecur number is ", lenRecur.number
'''
aStr: a string
returns: int, the length of aStr
'''
if aStr == '':
return 0
else:
print aStr
lenRecur.number += 1
print "else number is ", lenRecur.number
return lenRecur(aStr[:-1])
每次重置计数器的替代方法,代价是使用两个参数:
def lenRecur(aStr, recurse=False):
if not recurse:
lenRecur.number = 0
print "lenRecur number is ", lenRecur.number
'''
aStr: a string
returns: int, the length of aStr
'''
if aStr == '':
return 0
else:
print aStr
lenRecur.number += 1
print "else number is ", lenRecur.number
return lenRecur(aStr[:-1], True)
我不知道练习的实际意义是什么,以及在实施过程中您能做什么和不能做什么。