同一判断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的执行流程举例:
- 27>0,既不是1也不是3,27%3=0,进入else分支调用
self.isPowerOfThree(9) - 9>0,同样进入else分支调用
self.isPowerOfThree(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
相关产品推荐
相关产品推荐

