返回结果在Python递归函数中消失

时间:2016-01-28 16:47:40

标签: python string recursion

赋值是编写一个返回字符串s长度的递归函数lenRecur(s)。允许切片,显然len()函数不是。在经历了下面的代码挣扎太久之后,答案就明白了:它实际上是众所周知的一行代码,#34;很简单!以下是 NOT "正确"回答,但我仍然想知道它为什么不起作用。我试图递归地分解字符串并用索引计算步数,但索引每次都重置为0,所以我想创建一个内部函数countRecur(s,i),它需要s 初始索引作为参数,并使用每次递归扩充索引。最终索引将返回到外部函数。底线:指数曲线正确,但返回i返回无。

def lenRecur(s):    
    i=0  

    def countRecur(s,i):         
        if s == "":                        
            print "final i  =   ", i
            return i    
        else:
            i+=1            
            print s
            s = countRecur(s[:-1],i)              

    p = countRecur(s,i)    
    return p
s = "abc"
q = lenRecur(s)    
print q

这是输出:

abc
ab
a
final i  =    3
None

1 个答案:

答案 0 :(得分:2)

您的问题是,您没有返回s,您应该将其更改为i,因为当s是最初的字符串时它是计数。当你没有归还它时,你基本上扔掉s而p永远不会被设置。

def lenRecur(s):    
    i=0  

    def countRecur(s,i):         
        if s == "":                        
            print "final i  =   ", i
            return i    
        else:
            i+=1            
            print s
            i = countRecur(s[:-1],i)
        return i

    p = countRecur(s,i)
    return p
s = "abc"
q = lenRecur(s)    
print q

abc
ab
a
final i  =    3
3