Добавьте один к вызову функции в Python - PullRequest
0 голосов
/ 18 августа 2010

Что делает последняя строка, возвращающая 1 + ....?Как вернуть 1 плюс вызов функции?

Ниже приведен текст назначения:

Эти функции рекурсивно подсчитывают количество экземпляров ключа в целевой строке

def countSubStringMatchRecursive(target, key):
    currentPosition = find(target, key)
    if find(target, key) == -1:
        return 0
    else:
        return 1 + countSubStringMatchRecursive(target[currentPosition+1:], key) 

Ответы [ 3 ]

2 голосов
/ 18 августа 2010

Последняя строка не возвращает «1 плюс вызов функции», она возвращает 1 + возвращаемое значение функции, которое равно либо 0, либо 1 в зависимости от того, было ли выполнено условие.

Это рекурсивно, в том смысле, что возвращаемое значение из вызова функции будет равно 1 + возвращаемое значение другого вызова функции - снова, и снова, и снова, до find(target, key) == -1.

Думайте об этом больше как:

return 1 + ( 1 + (1 + (1 + (0))))

1 голос
/ 18 августа 2010

Код, который вы показали, делает это:

currentPosition = find(target, key)
if find(target, key) == -1:

когда это должно быть сделано:

currentPosition = find(target, key)
if currentPosition == -1:

Если ваш учитель действительно написал этот код, пришло время сменить школу!

1 голос
/ 18 августа 2010

Лучше думать об этом с конца дела.Допустим, у вас есть 3 возможных совпадения.Вызовы должны выглядеть так:

countSubStringMatchRecursive(target, key)

  (The find operation is not -1, so call again)
  1 + countSubStringMatchRecursive(target, key)

    (The find operation is not -1, so call again)
    1 + countSubStringMatchRecursive(target, key)

      In this end case, the find operation is -1, so this function returns a 0.

    Return value at this level is now 1 + 0 = 1

  Return value at this level is now 1 + 1 = 2

 Return value at the topmost level is now 1 + 2 = 3

Итак, как вы можете видеть, вызов функции 1+ - это, в основном, способ отслеживать количество.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...