RecursionError в моей программе при попытке перевернуть стек с помощью append, empty () и pop и без итераций - PullRequest
0 голосов
/ 06 мая 2020
import sys
import os

Обращение стека с использованием пустого pop и append и без итераций.

мы будем использовать рекурсивный вызов.

def insert_element_at_bottom(stack, item):
    if isEmpty(stack):
        push(stack, item)
    else:
        temp = pop(stack)
        insert_element_at_bottom(stack, item)
        push(stack, temp)

def create_stack():
    stack = []
    return stack


def push(stack, item):
    stack.append(item)


def pop(stack):
    if isEmpty(stack):
        print("stack underflow")
        exit(1)
        return stack.pop()


def isEmpty(stack):
    return len(stack) == 0


def reverse_stack(stack):
    if not isEmpty(stack):
        temp = pop(stack)
        reverse_stack(stack)
        insert_element_at_bottom(stack, temp)


def print_stack(stack):
    for i in range(len(stack) - 1, -1, -1):
        print(stack[i], end=' ')
    print()

код драйвера

stack = create_stack()
push(stack, str(4))
push(stack, str(3))
push(stack, str(2))
push(stack, str(1))
print("Original stack:")
reverse_stack(stack)
print("Reversed stack:")
print_stack(stack)

Я получаю сообщение об ошибке:

RecursionError: превышена максимальная глубина рекурсии при вызове объекта Python.

1 Ответ

1 голос
/ 06 мая 2020

привет, вам нужно изменить reverse_stack, которое вы опускаете, чтобы остановить рекурсию

вы можете сделать что-то вроде этого:

def reverse_stack(stack_q, len_s= None): 

        if len_s is None: 
            len_s = len(stack_q) 
        if len_s in  (0, 1): 
            return  

        stack_q.insert(len(stack_q) - len_s,  stack_q.pop()) 

        len_s -=1        
        reverse_stack(stack_q, len_s) 

давайте попробуем:

a = list(range(1, 10))
a                          
[1, 2, 3, 4, 5, 6, 7, 8, 9]

reverse_stack(a)
a                          
[9, 8, 7, 6, 5, 4, 3, 2, 1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...