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

同一判断3的幂的递归代码在LeetCode与VSCode运行结果差异问题

问题分析:判断3的幂的递归代码在VSCode与LeetCode的差异

先看你提供的代码:

class Solution:
    def isPowerOfThree(self, n: int) -> bool:

        if(n>0):
            if(n == 1 or n == 3): return True
            elif(n%3 != 0): return False
            else: self.isPowerOfThree(n/3)

        else: return False

核心问题:递归调用未返回结果

这段代码的bug很明确——处理大于3的3的幂(比如27)时,递归调用self.isPowerOfThree(n/3)的结果没有被返回。Python里函数如果没有显式写return语句,默认会返回None。

拿n=27的执行流程举例:

  1. 27>0,既不是1也不是3,27%3=0,进入else分支调用self.isPowerOfThree(9)
  2. 9>0,同样进入else分支调用self.isPowerOfThree(3)
  3. 3符合条件返回True,但这个True只会返回到处理9的那层函数,而那层函数没有return这个结果,最终最外层函数返回None

为什么VSCode和LeetCode表现不同?

这和编译器/判题系统的行为无关,问题出在测试环节:

  • LeetCode的判题系统会严格校验函数返回值,None会被视为布尔值False,所以测试用例27会判定失败。
  • 你在VSCode中认为代码能通过所有测试用例,大概率是测试不严谨:比如只测了1、3、非3的倍数这类简单用例,或者运行时没仔细看返回值(比如把print出来的None误判为正确结果)。

修正后的代码

给递归调用加上return,同时用整数除法避免浮点数问题:

class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        if n > 0:
            if n == 1 or n == 3:
                return True
            elif n % 3 != 0:
                return False
            else:
                return self.isPowerOfThree(n // 3)
        else:
            return False

内容的提问来源于stack exchange,提问作者Coder25

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:12:20