2015-08-10 8 views
0

Я делаю MIT Intro для CS-класса, чтобы изучить python и застрял в наборе проблем, включающем рекурсивное программирование (вызов функции внутри себя). Цель состоит в том, чтобы найти ряд вхождений для заданной целевой строки. У меня есть следующий код, и из моей логики кажется, что это так, но я не могу понять, почему это не так! Буду признателен за любую оказанную помощь. Благодарю.Рекурсивная простая функция Python

def countSubStringMatchRecursive(target,key): 
    answers = [] 
    match = target.find(key) 

    if match != -1: 
     answers.append(match) 
     next_target = target[match+1:] 
     countSubStringMatchRecursive(next_target,key) 

    return len(answers) 

Так что для заданных аргументов:

target1 = 'mjzzmjzzmj' 
key1 = 'zz' 

print(countSubStringMatchRecursive(target1, key1)) 

Я получаю 1 вместо правильного ответа из двух.

Это на Python3 кстати.

+1

Пожалуйста, объясните, как именно ваш код выходит из строя. Это крушение? Вернуть неверные данные? (Пример ввода/вывода/ожидаемого) – Blorgbeard

+0

Вы просто хотите подсчет или хотите индексы? Что относительно совпадающих совпадений, например. «aba» встречается дважды в «ababa», если вы допускаете перекрытие. – Cyphase

+0

См. Редактирование. Я получаю неправильный ответ. Я ищу счет здесь. – MJ49

ответ

2

Поскольку вам не нужны ответы .. вам не нужны ответы; просто счет.

from __future__ import print_function 


def countSubStringMatchRecursive(target, key): 
    match = target.find(key) 

    if match != -1: 
     next_target = target[match+1:] 
     return 1 + countSubStringMatchRecursive(next_target, key) 
    else: 
     return 0 


print(countSubStringMatchRecursive('asd asd asd', 'sd')) # 3 
print(countSubStringMatchRecursive('ababa', 'ab')) # 2 

Это количество совпадающих совпадений; дайте мне знать, если вы этого не хотите.

0

Причина: переменная «ответ» находится в теле функции. Следовательно, каждый раз, когда вы вызываете функцию, она будет сброшена как «answer = []»

answers=[] 

def countSubStringMatchRecursive(target,key): 
    match = target.find(key) 

    if match != -1: 
     global answers 
     answers.append(match) 
     next_target = target[match+1:] 
     countSubStringMatchRecursive(next_target,key) 

    return len(answers) 

target1 = 'mjzzmjzzmj' 
key1 = 'zz' 

print(countSubStringMatchRecursive(target1, key1)) 
Смежные вопросы