class Stack(object):
def __init__(self,items=[]):
self.stack = items
def is_empty(self):
return not self.stack
def pop(self):
return self.stack.pop()
def push(self,val):
self.stack.append(val)
def __repr__(self):
return "Stack {0}".format(self.stack)
def flip_stack(stack):
def flip_stack_recursive(stack,new_stack=Stack()):
if not stack.is_empty():
new_stack.push(stack.pop())
flip_stack_recursive(stack,new_stack)
return new_stack
return flip_stack_recursive(stack)
s = Stack(range(5))
print s
print flip_stack(s)
Stack [0, 1, 2, 3, 4]
Stack [4, 3, 2, 1, 0]
Вы даже можете получить немного фантазии, используя тот факт, что замыкание сохраняет параметр stack
flip_stack
в области рекурсивной функции, поэтому вам не нужно, чтобы он являлся параметром внутренней функции. например
def flip_stack(stack):
def flip_stack_recursive(new_stack):
if not stack.is_empty():
new_stack.push(stack.pop())
flip_stack_recursive(new_stack)
return new_stack
return flip_stack_recursive(Stack())
Или, чтобы избавиться от всех параметров на рекурсивной функции, и ваш поток кадров стека будет спасибо:
def flip_stack(stack):
new_stack = Stack()
def flip_stack_recursive():
if not stack.is_empty():
new_stack.push(stack.pop())
flip_stack_recursive()
flip_stack_recursive()
return new_stack
ли это быть рекурсивными? –
Да. Должен быть рекурсивным. – isal
Это звучит как вопрос домашней работы. Если это так, вы должны добавить тег «домашняя работа» –