2017-01-31 2 views
1
def removedups(word): 
    if len(word)<=1: 
    return word 
    else: 
    if word[0]==word[1]: 
     return removedups(word[1:]) 
    else: 
     return word[0]+removedups(word[1:]) 

print(removedups('aabbcc')) 

Я не понимаю, как рекурсия работает для этого случая. Мои знания до сих пор:Рекурсия Python

1) он пропускает тест базы

2) идет на вызов рекурсии и возвращает «abbcc», а затем он начинает снова:

3) если заявление в вызове рекурсии неверно, поэтому вы не обращаете на него внимания

4) Заявление else, где я запутался, когда он говорит return word[0] +removedups(word[1:]). Выполняется ли это утверждение if и проверяет слово ('bbcc')

+0

Btv, что первый 'else' пункт может быть удален, а второй' if' может стать одним 'elif', и вернулся углубление с последним' else'. Правильный синтаксис;) –

+0

Фактически оба 'else' могут быть удалены. Краткое описание: p – kda

ответ

1
return word[0]+removedups(word[1:]) 

слово [0] + removedups (слово [1:]) возвращается только тогда, когда исполнение removedups (слово [1:]) завершена.

removedups ('BBCC') возвращает 'BC'

Так removedups ('abbcc') возвращает 'а' + 'BC' т.е. 'абв'

+1

Привет! если вы не возражаете, вы можете объяснить в более подробном PLS – Chris

+0

'removeups ('aabbcc') = removeups ('abbcc') = 'a' + removedups ('bbcc') deletedups ('bbcc') = deletedups ('bbcc') = 'bcc') = 'b' + removedups ('cc') deletedups ('cc') = deletedups ('c') = 'c'' –

+0

большое вам спасибо :) – Chris

1

Вы добираетесь до последнего else, если в списке есть не менее 2 элементов, а первые 2 не совпадают. Это означает, что первый элемент не является дубликатом и, следовательно, должен появиться в результате. Но в остальной части списка могут быть и другие дубликаты. Таким образом, ответ заключается в том, чтобы добавить этот первый элемент к тому, что вы получаете, удалив любые дубликаты из остальной части списка: word[0]+removedups(word[1:]).

0

Последнее еще условие и основа случае отвечают для производства 'abc' result.Whereas else: if word[0]==word[1]: удаляет повторяющиеся элементы.

removedups('aabbcc') =>removedups('abbcc')

removedups('abbcc') =>'a' + removedups('bbcc')

'a' + removedups('bbcc') =>'a'+ removedups('bcc') 

'a' removedups('bcc') =>'ab' + removedups('cc') 

'ab' + removedups('cc') => 'ab' + removedups('c') 

'ab' + removedups('c') => 'abc' 
Смежные вопросы