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

如何用递归实现判断y是否为x的幂并返回对应指数?

递归实现判断y是否为x的幂并返回指数

原代码的问题分析

你的当前代码逻辑完全偏离了递归解法的核心思路:

  • 递归调用时传递的solution(pow, y - 1)毫无意义,既没有逐步缩小问题规模,也没有正确累积指数计数
  • x == 1时返回布尔值(y == 1),不符合题目要求的数字返回格式(应返回0或-1)
  • 循环的使用和递归设计冲突,递归解法不需要预计算幂值来推进逻辑

关于取模运算符的使用

取模运算符%确实是这个问题的关键辅助工具:当y不能被x整除时,说明y绝对不可能是x的幂,此时可以直接返回-1终止递归。

正确的递归解法思路

递归的核心是逐步缩小问题规模,同时累积指数计数:

  1. 边界条件处理:
    • 如果x === 1:只有当y === 1时返回0(因为1^0 = 1,且1的任何次幂都是1,若y≠1则返回-1)
    • 如果y === 1:返回0(任何数的0次幂都是1,这是递归的终止点之一)
    • 如果y % x !== 0:返回-1(无法被x整除,直接排除)
  2. 递归逻辑:
    将y除以x,递归调用函数处理新的y,如果递归结果不为-1,则返回结果+1(累积指数);若递归结果为-1,直接返回-1。

修正后的代码

function solution(x, y) {
    // 处理x=1的特殊情况
    if (x === 1) {
        return y === 1 ? 0 : -1;
    }
    // 终止条件:y等于1,说明已经除到x的0次幂
    if (y === 1) {
        return 0;
    }
    // 如果y不能被x整除,直接返回-1
    if (y % x !== 0) {
        return -1;
    }
    // 递归调用,将y缩小为y/x,指数加1
    const result = solution(x, y / x);
    return result === -1 ? -1 : result + 1;
}

console.log(solution(3, 9)); // 输出2,符合预期
console.log(solution(2, 8)); // 输出3
console.log(solution(5, 25)); // 输出2
console.log(solution(2, 7)); // 输出-1
console.log(solution(1, 1)); // 输出0
console.log(solution(1, 5)); // 输出-1

代码解释

以solution(3,9)为例:

  1. 第一次递归:9%3===0,调用solution(3,3)
  2. 第二次递归:3%3===0,调用solution(3,1)
  3. 第三次递归:y===1,返回0
  4. 回溯时,第二次递归返回0+1=1,第一次递归返回1+1=2,得到最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:50:23