如何在递归函数体

时间:2017-04-09 08:57:59

标签: python recursion

下面的代码,用于计算' 1'的编号。字符串中的字符。

count2=0 #global variable
def Ones(s):
    no=0;
    global count2 #wanted to eliminate global variable
    if(count2>=len(s)):
        return no
    if(s[count2]=='1'):#count2 is the index of current character in String
        no = no+1
        count2=count2+1
        return no + Ones(s)
    else:
        count2=count2+1
        return Ones(s)

在上面的代码中使用count2作为全局变量,是否有任何可能的方法来声明和使用count2变量作为函数内的局部,试过但是没有运气

def Ones(s):
    count2=0 # but everytime it get reset to zero

注意:函数的参数个数应该只保留一个,并且不能使用任何其他辅助函数。

2 个答案:

答案 0 :(得分:2)

避免显式状态变量是递归概念的重要部分。

您调用的方法只需要字符串的其余部分就可以找到1。因此,不是传递字符串,而是传递字符串中的位置,而只能传递字符串的其余部分。

Python强大的索引语法使这很容易。只需这样看:方法的每个实例都可以带走它处理的部分(在这种情况下:一个字符),传递它没有处理的部分(字符串的其余部分)。

答案 1 :(得分:2)

就像@ypnos所说,如果你真的想使用递归,这里是代码:

def Ones(s):
    if not s:
        return 0
    if s[0]=='1':
        return 1 + Ones(s[1:])
    else:
        return Ones(s[1:])

希望它有所帮助。