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

Python递归函数is_power_of补全求助及递归原理困惑解答

补全is_power_of函数及递归原理讲解

补全后的完整代码

def is_power_of(number, base):
  # Base case: when number is smaller than base.
  if number < base:
    # If number is equal to 1, it's a power (base**0).
    return number == 1

  # Recursive case: keep dividing number by base.
  return is_power_of(number / base, base)

print(is_power_of(8,2)) # Should be True
print(is_power_of(64,4)) # Should be True
print(is_power_of(70,10)) # Should be False

代码补全说明

  1. 第一个空白处:return number == 1
    当number小于base时,只有number等于1的时候,它才是base的0次幂(任何正数的0次幂都是1),否则就不是base的幂,直接返回这个布尔判断结果即可。

  2. 第二个空白处:is_power_of(number / base, base)
    递归的核心是把大问题拆成等价的小问题:如果number是base的k次幂,那么number / base必然是base的k-1次幂。所以我们通过递归调用,把判断number是否为base的幂,转化为判断number/base是否为base的幂,逐步缩小问题规模。

递归基础原理讲解

递归的本质是函数自己调用自己,必须满足两个核心条件才能正常工作:

  • 终止条件(Base Case):必须有明确的停止点,否则函数会无限调用直到栈溢出。这里的终止条件就是number < base的情况,直接返回布尔结果,不再继续递归。
  • 问题规模缩小:每次递归调用都要把原问题拆解成更小的子问题,直到触碰到终止条件。这里每次调用都把number除以base,让number越来越小,最终会进入终止条件的判断。

实际执行流程示例

以is_power_of(8,2)为例:

  1. 初始调用:8 >= 2,进入递归,调用is_power_of(4,2)
  2. 第二次调用:4 >= 2,调用is_power_of(2,2)
  3. 第三次调用:2 >= 2,调用is_power_of(1,2)
  4. 第四次调用:1 < 2,触发终止条件,返回1 == 1即True
  5. 结果逐层返回:第三次调用返回True,第二次调用返回True,初始调用最终返回True

再看is_power_of(70,10):

  1. 初始调用:70 >=10,调用is_power_of(7,10)
  2. 第二次调用:7 <10,触发终止条件,返回7 ==1即False,初始调用最终返回False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:05:15