You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python栈递归排序:类内sort_s方法调用出现NameError的解决办法

解决栈排序递归方法的NameError问题

你遇到的NameError核心原因是:sort_s是Stack类的实例方法,不是全局函数,不能直接在类外部调用sort_s(test);同时方法内部的递归调用也未正确使用实例方法语法。完全可以把排序方法保留在类内,只需要修正调用逻辑和递归实现,以下是具体方案:

修正后的完整代码

# Sort a stack using recursion

class Stack:
    def __init__(self, arr=[]):
        self.stack = []
        for ele in arr:
            self.stack.append(ele)

    def __len__(self):
        return len(self.stack)

    def __str__(self):
        res = ''
        for each in self.stack:
            res += str(each) + ' '
        return res

    def get_stack(self):
        return self.stack

    def push(self, number):
        self.stack.append(number)

    def pop(self):
        ele = self.stack[-1]
        self.stack.pop()
        return ele

    def tail(self):
        tail = self.stack[-1]
        print(tail)

    def sort_s(self):
        if len(self.stack) <= 1:  # Base Condition: 栈长度<=1时无需排序
            return
        temp = self.pop()  # Hypothesis: 弹出栈顶,假设剩余栈可被排序
        self.sort_s()  # 递归排序剩余栈
        self.ordered_insert(temp)  # Induction: 将弹出元素插入有序栈的正确位置

    def ordered_insert(self, temp):
        # 边界处理:栈为空直接压入
        if not self.stack:
            self.push(temp)
            return
        # 若栈顶元素小于等于temp,直接压入
        if self.stack[-1] <= temp:
            self.push(temp)
            return
        # 否则弹出栈顶,递归找到合适位置后再放回
        top = self.pop()
        self.ordered_insert(temp)
        self.push(top)


if __name__ == '__main__':
    test = Stack([0, 5, 1])
    print(test)
    test.tail()
    test.push(3)
    y = test.pop()
    print(f'{10+y}')
    print(test)
    test.push(6)
    test.push(9)
    test.push(8)

    # 调用实例的sort_s方法
    test.sort_s()
    print(test)

关键修改说明

  1. 外部调用修正:类外部通过实例调用方法,用test.sort_s()替代sort_s(test)
  2. 递归调用修正:sort_s内部用self.sort_s()实现递归,不再传递额外参数,直接操作当前实例的栈
  3. ordered_insert逻辑优化:改用递归实现(更贴合IBH递归思路),同时处理了栈为空、temp大于所有元素等边界情况
  4. 方法职责简化:sort_s不再返回栈,直接修改当前实例的self.stack,符合面向对象设计逻辑

内容的提问来源于stack exchange,提问作者Areeb Hussain Qureshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 12:03:38