java - 递归查找一个数是否是另一个数的幂
问题描述
考虑这段代码
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 语句中,这让我认为我没有计算这个对。一些洞察力会很棒。
解决方案
我已经解决了这个问题。我应用了错误的模式,它应该看起来像这样。
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);
}
推荐阅读
- android - java.lang.IllegalArgumentException:索引 2 处的绑定值为空?
- laravel - 中断循环并捕获剩余项目计数
- tensorflow - 如何保存我自己训练的词嵌入模型(使用 Keras),如 word2vec 和 Glove
- asp.net - 无法解析类型“Microsoft.AspNetCore.Identity.SignInManager”的服务
- python - 如何使用列表打印文本并将更多列表组件组合到字符串?
- powershell - 使用当前用户 AD 组成员映射网络驱动器
- java - 有没有办法模拟 Socket 和 Connection 超时?
- python - 谷歌应用引擎中的 Flask-Compress 模块未压缩响应正文
- html - 为什么`display:none`不加载背景图片?
- r - 如何编写一个函数来对多个数据集应用分析并将结果合并到一个数据框中?