Не не проверено ...
код:
def countSubStringMatchRecursive(target, key, count=0):
#### index = find(target, key) # HUH?
index = target.find(key)
if index >= 0:
count += 1
target = target[index+len(key):]
count = countSubStringMatchRecursive(target, key, count)
return count
for test in ['', 'bar', 'foo', 'foofoo', 'foo foo foo fo']:
print countSubStringMatchRecursive(test, 'foo'), test.count(key), repr(test)
выход:
0 0 ''
0 0 'bar'
1 1 'foo'
2 2 'foofoo'
3 3 'foo foo foo fo'
Я предполагаю, что это просто развлечение или домашнее задание ... рекурсивная функция должна быть медленнее, чем соответствующее итеративное решение Python, что, естественно, медленнее, чем использование target.count(key)
... поэтому я не потрудился исправить все проблемы вашей версии ... но прочитайте PEP-008: -)
Комментарии к строковому модулю
Вы прокомментировали, что пропустили from string import find
. Какую версию Python вы используете? Какова последняя дата обновления используемой книги или учебника?
С самого начала строкового модуля (он будет на вашем компьютере как <your Python install directory>/Lib/string.py
; я цитирую версию 2.6):
"" "Коллекция строковых операций (большинство из них больше не используются).
Предупреждение: большая часть кода, который вы видите здесь, обычно не используется в настоящее время.
Начиная с Python 1.6, многие из этих функций реализованы как
методы на стандартном строковом объекте. Раньше они были реализованы
встроенный модуль, называемый strop, но теперь strop устарел сам по себе.
и т.д.
"" "
и вот код этого файла для функции find
(без комментариев):
def find(s, *args):
return s.find(*args)
, поэтому использование string.find(target, key)
вместо target.find(key)
- пустая трата времени.