2016-09-16 3 views
0

Я пытался написать функцию python, которая получит два аргумента: x, который является числом раз повторять, и y, который является числом или строкой, которая должна быть повторена.Как написать рекурсивную функцию для печати строки определенное количество раз?

До сих пор это то, что я смог придумать, но я не могу определить, как это сделать рекурсивно.

def recurse(x, y): 
    final = [] 
    if x == 0: 
     return ("") 
    else: 
     x = x - 1 
     final.append(recurse(x,y))    
    return final 

Если recurse(3,"Cat") называется, выход предназначен выглядеть следующим образом:

print recurse(3, 'cat') 
['cat','cat','cat'] 

Как бы я идти об этом?

+1

Чтобы понять рекурсию, вам нужно понять рекурсию :) Вам нужно вызвать функцию recurse из самой рекурсии. – vpekar

+0

Смотря фильм «Начало» также помогает –

ответ

0
def recurse(x, y): 
    final = [] 
    if times == 0: 

Вы не можете просто ссылаться на «раз», как будто это какой-то волшебной плавучий переменной доступны везде и всюду. В первый раз здесь times не будет иметь значения. И в следующий раз вы надеетесь, что вы сможете просто выбрать значение из воздуха, и это будет волшебно быть тем, что было где-то в другом месте, в течение какого-то предыдущего запуска.

Единственными переменными, с которыми вы можете работать, являются те, которые полностью находятся внутри вашей функции - или те, которые передаются снаружи, и возвращаются в конце.

def recurse(times, word): 
    if times == 1: 
     return [word] 
    else: 
     return [word] + recurse(times-1, word) 

print(recurse(3, 'cat')) 

Try it online at repl.it

Это занимает несколько раз в качестве входных данных, он возвращает [word] плюс (Это занимает несколько раз - 1 в качестве входных данных, он возвращает [word] плюс (Это занимает несколько раз - 1 в качестве входных данных, он возвращает [word])

Примечания нет списка аккумулятора, как final = [], потому что каждый раз, когда с помощью функции будет пустыми снова накопление происходит неявно в том, как языке программирования, вызовы функций и возвращает значение.. s. Python будет хранить [word] в самой памяти, пока он вычисляет следующий результат recurse().

+0

Прошу прощения за ссылку 'times'. Я допустил ошибку в своем коде. Однако я исправил свой вопрос. – proton

+0

Ваш код работал отлично @TessellatingHeckler. благодаря – proton

1

Истинная функциональная рекурсия должна иметь no присвоения (то есть состояние). Это может быть достигнуто с использованием так называемого аккумулятора , то есть массива, который создается последовательно и передается на каждый рекурсивный шаг, пока не произойдет базовый случай, в результате чего окончательная форма аккумулятора будет возвращена напрямую и косвенно полностью назад к первому вызывающему экземпляру.

>>> def recurse(Iters, text, Accumulator=[]): 
... if Iters == 0: return Accumulator     # base case 
... return recurse(Iters-1, text, Accumulator + [text]) # recursive step 
... 
>>> recurse(3, 'helle') 
['helle', 'helle', 'helle'] 

Обратите внимание, что не существует никакого изменения состояния в любой точке; все «обновления» происходят в точке вызова следующего рекурсивного шага с обновленными аргументами.

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