试图弄清楚Python中的递归计数程序

0 投票
4 回答
1159 浏览
提问于 2025-04-16 16:08
def countSubStringMatchRecursive(target,key):
    """Counts how many times key is in string(string,key)"""
    x=find(target,key)
    print x
    return x!=-1 and countSubStringMatchRecursive(target[x+1:],key)+1 

这个程序的作用是接收一个字符串,然后计算里面某个子字符串出现的次数。比如说,如果目标字符串是'banana',而我们要找的子字符串是'an',那么这个函数会返回2。

我有点搞不清楚它是怎么做到的。x!=1这个条件是不是意味着程序只返回不等于1的x的值?我猜想在countSubStringMatchRecursive...这个函数最后的+1是用来计数的。

4 个回答

0

String.find 这个函数会返回匹配到的字符串的最小索引值。也就是说,只有当你找到你要找的子字符串时,才会进行递归(如果没找到,String.find 就会返回 -1)。

2

正如jhwist所说,String.find这个方法会返回匹配到的最小索引位置。所以,只有在确实找到了子字符串的情况下,才会进行递归(如果没找到,String.find会返回-1)。

这种做法效率很低。Python有一个更好的方法,叫做str.count(sub[, start[, end]])。你可以在这里查看详细说明:http://docs.python.org/library/stdtypes.html#str.count

所以,不用

countSubStringMatchRecursive("test test test test", "test")

你可以使用

"test test test test".count("test")
1

x是找到的子字符串的位置索引。如果它是-1,说明没有找到,因此这个方法返回0。

换句话说,它会“短路”,也就是不去检查第二个条件(比如说,它不会进行递归调用)。如果找到了子字符串,它会用找到的子字符串位置加1来递归调用自己(这样可以找到下一个子字符串,如果存在的话),并且结果加1。

撰写回答