首页 > 解决方案 > 递归查找一个数是否是另一个数的幂

问题描述

考虑这段代码

public static boolean isPower(int x, int n) {

    if (x == 1)
        return (n == 1);

    int pow = 1;
    while (pow < n)
        pow = pow * x;
        return (pow == n);
}

目标是找出数字 x 是否是数字 n 的幂我提出了这个算法,并且它有效。我也想递归地解决它。我通读了有人在评论中添加的链接帖子(https://softwareengineering.stackexchange.com/questions/279004/general-way-to-convert-a-loop-while-for-to-recursion-or-from-a-recursion-to-a

我尝试复制或使用答案中提供的模式。

首先,我试图确定我的标题、条件循环和尾部是什么。

public static boolean isPower(int x, int n) {

    if (x == 1)//header
        return (n == 1);//header

    int pow = 1;//header
    while (pow < n)//condition
        pow = pow * x;//loop
        return (pow == n);//tail
}

现在我尝试应用这种模式;

public static boolean isPower_recursive(int x,int n) {
    if(x == 1)
        return (n==1);
    return isPower_recursion( x, n, 1);

    }
    public static boolean isPower_recursion(int x,int n, int pow) {
    if( 1 > n) {
        return (pow == n);
    }
    pow = pow * x;
    return isPower_recursion(x,n,pow);

}

这仅适用于 x 和 n 均为 1 的情况,在所有其他情况下,我都会收到 Stackoverflow 错误。编译器说错误发生在 isPower_recursive 方法的 return 语句中,这让我认为我没有计算这个对。一些洞察力会很棒。

标签: javarecursion

解决方案


我已经解决了这个问题。我应用了错误的模式,它应该看起来像这样。

public static boolean isPower_recursive(int x,int n) {
    if(x == 1)
        return (n==1);
    return isPower_recursion( x, n, 1);
 
    }
    public static boolean isPower_recursion(int x,int n, int pow) {
    if( pow >= n) {
        return (pow == n);
    }
    pow = pow * x;
    return isPower_recursion(x,n,pow);
 
}

推荐阅读