有人能解释一下这个python递归代码吗?

有人能解释一下这个python递归代码吗?,python,sorting,recursion,stack,Python,Sorting,Recursion,Stack,我正在尝试对堆栈进行排序,以便使用递归将最小的元素放在堆栈的顶部。当我运行代码时,结果有时是不可预测的 这是密码 class stack: def __init__(self): self.items = [] def push(self, item): self.items.append(item) def pop(self): return self.items.pop() def peek(self): return self.items[len(self.

我正在尝试对堆栈进行排序,以便使用递归将最小的元素放在堆栈的顶部。当我运行代码时,结果有时是不可预测的

这是密码

class stack:
def __init__(self):
    self.items = []
def push(self, item):
    self.items.append(item)
def pop(self):
    return self.items.pop()
def peek(self):
    return self.items[len(self.items)-1]
def is_empty(self):
    return self.items == []
def size(self):
    return len(self.items)

class sort_the_stack:

    def __init__(self):
        self.sorted_stack = stack()

    def sort_stack(self, new_stack):
        for i in range(new_stack.size()):
            self.push(new_stack.pop())
        return self.sorted_stack

    def push(self, val):
        if self.sorted_stack.size() == 0:
            self.sorted_stack.push(val)
        else:
            temp = self.sorted_stack.peek()
            if val < temp:
                self.sorted_stack.push(val)
            else:
                temp = self.sorted_stack.pop()
                self.push(temp)
                self.sorted_stack.push(temp)

    def peek(self):
        return self.sorted_stack.peek()

    def pop(self):
        return self.sorted_stack.pop()

new_stack = stack()

new_stack.push(10)

new_stack.push(2)

new_stack.push(1)

new_stack.push(8)

new_stack.push(10)

new_stack.push(10)

stack1 = sort_the_stack()

stack1.sort_stack(new_stack)


print(stack1.pop())

print(stack1.pop())

print(stack1.pop())

print(stack1.pop())

print(stack1.pop())

print(stack1.pop())
类堆栈:
定义初始化(自):
self.items=[]
def推送(自身,项目):
self.items.append(项目)
def pop(自我):
返回self.items.pop()
def peek(自):
返回自项目[len(self.items)-1]
def为空(自身):
返回self.items==[]
def大小(自身):
返回len(自我项目)
类排序\u\u堆栈:
定义初始化(自):
self.sorted_stack=stack()
def分拣_堆栈(自身、新_堆栈):
对于范围内的i(新的_stack.size()):
self.push(new_stack.pop())
返回self.u堆栈
def推送(自身,val):
如果self.sorted_stack.size()=0:
self.sorted_stack.push(val)
其他:
temp=self.sorted_stack.peek()
如果val<温度:
self.sorted_stack.push(val)
其他:
temp=self.sorted_stack.pop()
自动推送(温度)
自排序堆栈推送(临时)
def peek(自):
返回self.sorted_stack.peek()
def pop(自我):
返回self.sorted_stack.pop()
新建_stack=stack()
新的_堆栈推送(10)
新的_堆栈推送(2)
新的堆栈推送(1)
新的_堆栈推送(8)
新的_堆栈推送(10)
新的_堆栈推送(10)
stack1=对堆栈进行排序()
堆栈1.排序堆栈(新堆栈)
打印(stack1.pop())
打印(stack1.pop())
打印(stack1.pop())
打印(stack1.pop())
打印(stack1.pop())
打印(stack1.pop())

在递归情况下,看起来您要两次推送临时值,而不是实际尝试添加的值。你有

else:
 temp = self.sorted_stack.pop()
 self.push(temp)
 self.sorted_stack.push(temp)
但我想你想要

else:
 temp = self.sorted_stack.pop()
 self.push(val)
 self.sorted_stack.push(temp)

堆栈已经用Python实现了,为什么要实现自己的呢?@MichaelRobellard:通常是因为这是家庭作业:(@TapasBalu:you can't show your side试图找到解决这个问题的方法吗?你的递归调用在哪里?也许我只是忽略了它,但没有看到一个..我在做一些堆栈练习,试图不使用已经实现的堆栈