2016-10-19 7 views
1

Я пытаюсь создать простую функцию, которая инвертирует строку с использованием рекурсии.Рекурсивные функции: Обратное слово

это то, что я пробовал:

def inverse(ch): 
     if ch=='' : 
      return '' 
     else: 
      return ch[len(ch)]+inverse(ch[1:len(ch)-1]) 

    print inverse('hello') 

И это то, что я получаю:

line 13, in inverse return ch[len(ch)]+inverse(ch[1:len(ch)-1]) IndexError: string index out of range

+2

Индексы в строке от 0 до 'len-1'. Итак, как бы «ch [len (ch)]« был прав? – Barmar

+0

Разбить линию и использовать временные переменные, чтобы определить, какой индекс неверен. –

+0

Если вы хотите использовать последний символ слова, используйте отрицательный индекс: 'ch [-1]'. И срез до последнего символа - ch [0: -1] '. – Barmar

ответ

1

Проверьте это:

ch[len(ch)-1]+inverse(ch[0:len(ch)-1]) 
3

Вы индексировать строку в его длине , но помните, что индексирование основано на нулевом значении, поэтому вам придется обрезать длину минус 1, что является максимальным индексом, который вы можете безопасно использовать.

Однако вы можете не обращать внимания на длину, используя [-1] индексировать последний пункт:

def inverse(ch): 
    if ch=='' : 
     return '' 
    else: 
     return ch[-1]+inverse(ch[:-1]) 

print inverse('hello') 
# olleh 

И вы, вероятно, хотите, чтобы иметь в виду, что нарезка с [::-1] обеспечивает такой же результат, как ваш рекурсивный функция.

+0

Хорошо, что сработало для меня !, так что вы не можете использовать ch [len (ch)], чтобы получить последнего персонажа? – Ashref

+0

@Ashref Нет, вам нужно сделать это с минусом 1: 'ch [len (ch) -1]' –

1

Вам здесь не нужна рекурсия.

def inverse(chars): 
    char_list = list(chars) 
    char_list.reverse() 
    return ''.join(char_list) 
Смежные вопросы