试图弄清楚Python中的递归计数程序
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。