递归幂函数逻辑疑惑:为何返回1能得到base^exponent正确结果?
理解递归实现base^exponent的逻辑
先把你给出的递归代码贴出来:
function pow(base, exponent) { if (exponent === 0) { return 1; } return base * pow(base, exponent - 1); }
这个逻辑的核心其实是把大问题拆成更小的问题,再结合数学上的两个关键规则:
- 数学定义:任何数的0次幂都是1(这就是那个
return 1的依据,也是递归的终止点) - 递推关系:一个数的n次幂 = 这个数 × 它的n-1次幂(比如2³ = 2 × 2²)
咱们拿pow(2, 3)(也就是计算2的3次方)来一步步拆解,你就能看明白:
- 第一次调用
pow(2,3):exponent不是0,所以返回2 * pow(2,2) - 调用
pow(2,2):exponent不是0,返回2 * pow(2,1) - 调用
pow(2,1):exponent不是0,返回2 * pow(2,0) - 调用
pow(2,0):exponent等于0,直接返回1
现在开始往回“算账”:
pow(2,1)的结果是2 * 1 = 2(对应2¹=2)pow(2,2)的结果是2 * 2 = 4(对应2²=4)pow(2,3)的结果是2 * 4 = 8(对应2³=8)
说白了,那个return 1是整个递归的“基石”——没有它,函数会一直调用自己停不下来;而数学上a⁰=1的定义,刚好能让递推链完美闭合,从最底层的1开始,一步步往上乘出最终的结果。
内容的提问来源于stack exchange,提问作者Jalen Deleon
相关产品推荐
相关产品推荐

