我试图用递归函数计算字母“x”在字符串中出现的次数。我的函数目前这样做,但是我希望只有一个参数(字符串)。当函数在返回行中迭代时,我很难创建一个不被覆盖的计数器。在
为了说明我的意思:
def xCounter(string): <br>
**counter = 0** (This resets the counter to 0 with each iteration) <br>
if len(string) == 0:
return counter
elif string[0] == 'x':
counter = counter + 1
elif string[0] != 'x':
return xCounter(string[1:],counter)
return xCounter(string[1:],counter)
xCounter("gfljkgfxlkjsfxxljsx")
0
到目前为止,我让它工作的唯一方法是将counter定义为一个参数:
^{pr2}$xCounter("werixiuewrxiewx",0)
3
有谁能给我一些关于如何在这个函数中保持count而不重写count或将count定义为参数的一些见解吗?在
我想你这样做是为了练习递归,而不是为了实际的解决方案,对吧?在python中正确的方法是
但是,您的代码在每次迭代时都会重置计数器,这是正确的。在
有一些方法(比如全局变量)来跟踪计数器而不将其用作参数,但这是坏的坏的坏的。额外的参数是正确的方法。在
返回递归调用,如果字符存在,则加1。本例中的计数器为0或1,而不是运行总数。在
您可以将布尔变量设置为当前字符是否为“x”,然后可以将最后一行更改为类似以下内容:
最终结果将是一个加法表达式链,其中返回最终结果(1和0的加法“链”)。在
您还可以将“workhorse”函数包装在一个包装器中,该包装器自动传递初始参数,这样调用者就不必:
^{pr2}$其中
xCounterHelper
是原始函数。在在需要更多参数的复杂递归函数中,第二个选项非常方便。隐藏丑陋的多参数版本作为私有函数(如果它是类方法),并公开cleaner 1参数版本(注意Python没有私有函数)。这是更多的语言。在
试试这个:
。。。如果到达字符串的末尾,则返回0,否则返回0或1(取决于字符串[0]是“x”)加上字符串其余部分的函数值。。。你把所有这些数字加起来,然后得到你的答案!在
当然,这不是怎么做到的,但在递归函数中这是一个很好的实践。在
你甚至可以做得更短,比如一个兰姆达:
^{pr2}$相关问题 更多 >
编程相关推荐