python - Python递归函数返回结果消失

标签 python string recursion

作业是编写一个递归函数 lenRecur(s),它返回字符串 s 的长度。允许切片,显然 len() 函数不允许。在与下面的代码苦苦挣扎了太久之后,我突然明白了答案:这实际上就是众所周知的“一行代码”,如此简单!接下来的不是“正确”答案,但我仍然想知道为什么它不起作用。我试图递归地分解字符串并用索引来计算步数,但索引每次都重置为 0,所以我想创建一个内部函数 countRecur(s,i),它需要 s 和一个初始索引作为参数,并通过每次递归来增加索引。最终索引将返回给外部函数。底线:索引正常上升,但 return i 返回 None。

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

最佳答案

您的问题是您没有返回 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

关于python - Python递归函数返回结果消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35067223/

相关文章:

python - 带有数据库回滚的路由的 Flask 功能 pytest 测试

python - 将长字符串分成 513 个字符 block | Python 3.3

swift - 如何将标签设置为 Float 类型,以便我可以让标签描绘 slider 值(Xcode Swift)

java - 使用递归 Java 将十进制转换为二进制

java - 递增语句以跟踪递归方法中的比较

python - 在不使用嵌套 for 循环的情况下替换字符的最佳算法是什么?

python - 使用 Joblib 从 BytesIO 加载模型

python - 从 Python 中的字符串中删除所有冠词、连接词等

java - Java中如何将字符串的第一个字符放在字符串的最后一个位置?

recursion - 基本方案递归