2015-03-04 4 views
1

Так что задача состоит в том, что вы должны написать функцию рекурсии, которая подсчитывает количество «двойных» букв в строке, например, строка «hmmm» вернет 1, а строка «hmmm» вернет 1, хммм»вернется 2 и что строка„АВВ“будет возвращать 1. Мой код здесь:Python Recursion Двойные буквы

def num_double_letters(astr): 
    if astr == "" or len(astr) == 1: 
     return 0 
    elif len(astr) == 2: 
     if astr[0] == astr[1]: 
      return 1 + num_double_letters(astr[1:]) 
     else: 
      return 0 + num_double_letters(astr[1:]) 
    elif astr[0] != astr[1]: 
     return 0 + num_double_letters(astr[1:]) 
    elif astr[0] == astr[1] != astr[2]: 
     return 1 + num_double_letters(astr[1:]) 
    elif astr[0] == astr[1] == astr[2]: 
     return 0 + num_double_letters(astr[1:]) 

Моя проблема заключается в том, что строка с 4-мя одинаковыми буквами = 1, когда ее предполагается = 2, а также является там более чистый способ сделать это?

ответ

3

Я думаю, вы сделали это немного сложнее для себя ... нет необходимости углубляться в рекурсию, как только длина вашей строки равна 2, и вы хотите продвинуться на 2, а не 1, когда найдете двойной, чтобы считать, как я думаю, что вы делаете. Попробуйте это:

def num_double_letters(astr): 
    if astr == "" or len(astr) == 1: 
     return 0 
    elif len(astr) == 2: 
     if astr[0] == astr[1]: 
      return 1 
     else: 
      return 0 
    elif astr[0] != astr[1]: 
     return 0 + num_double_letters(astr[1:]) 
    elif astr[0] == astr[1]: 
     return 1 + num_double_letters(astr[2:]) 

print(num_double_letters('hmm')) 
print(num_double_letters('hmmm')) 
print(num_double_letters('hmmmm')) 

Выход:

1 
1 
2 

Вы могли бы рассмотреть следующую более вещий и кратким:

def num_double_letters(astr): 
    if len(astr) < 2: 
     return 0 
    if astr[0] == astr[1]: 
     return 1 + num_double_letters(astr[2:]) 
    return num_double_letters(astr[1:]) 
+0

Спасибо, сэр !! теперь, когда я смотрю на ваши [1:] и [2:], становится намного больше смысла. – Newb18

Смежные вопросы