有人能解释一下这个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试图找到解决这个问题的方法吗?你的递归调用在哪里?也许我只是忽略了它,但没有看到一个..我在做一些堆栈练习,试图不使用已经实现的堆栈