我必须通过递归计算X到Y的幂,只有加法。如果不使用循环或使用乘法,我真的无法弄清楚如何做到这一点。这不是我的功课。这是我去年考试的问题。
import java.util.Scanner;
public class Season4Task7 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter X");
int x = sc.nextInt();
System.out.println("Enter y");
int y = sc.nextInt();
System.out.println(findXY(x, y, 0));
}
static int findXY(int x, int y, int result){
if(y==0){
return 1;
}
if(x==0){
return 0;
}
if(y==1){
return result+x;
}
result+=x;
return findXY(x, y-1, result);
}
}
前两个ifs看起来很好,也许是'y-1',但之后它可能是不正确的,也有可能不使用'int result'而只是将x和y传递给函数?< / p>
答案 0 :(得分:1)
你的findXY
方法真正做的是简单的乘法,而不是取幂。首先,它可以从使用3个参数改进到仅2:
static int findXY(int x, int y){
if(y==0){
return 1;
}
if(x==0){
return 0;
}
if(y==1){
return x;
}
return x + findXY(x, y-1);
}
其次,你已经完成了一半!你刚刚找到了一种只使用加法和递归的方法。你现在需要做的是,再次使用递归将这个乘法调用一定数量。
在开始之前,让我们将方法从findXY
重命名为multiply
,因为它更能说明其意图和功能。
第三,我们需要实现计算功率的方法。请记住,我们将您的findXY
方法重命名为multiply
并将参数数量从3更改为2,我们的实现可能如下所示:
static int power(int x, int y) {
if(y == 0) {
return 1;
}
if(y == 1) {
return x;
}
return x * power(x, y-1));
}
嘿,但我们不允许使用乘法!幸运的是,我们自己实现了!最终产品如下所示:
static int power(int x, int y) {
if(y == 0) {
return 1;
}
if(y == 1) {
return x;
}
return multiply(x, power(x, y-1));
}
请注意,此方法不适用于负数。如果是这种情况,您可以将此方法包装在另一个方法中,只需调用power
abs
值并反转结果
答案 1 :(得分:0)
由于我们不能使用乘法,我们需要使用递归加法。检查下面的代码。如果条件正确,你的前三个。将以后的代码修改为以下方法。
package com.java;
import java.util.Scanner;
public class Season4Task7 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter X");
int x = sc.nextInt();
System.out.println("Enter y");
int y = sc.nextInt();
System.out.println("Final :: " + findXPowerY(x, y));
sc.close();
}
static int findXPowerY(int x, int y) {
if (y == 0) {
return 1;
}
if (x == 0) {
return 0;
}
if (y == 1) {
return x;
}
return multiply(x, findXPowerY(x, y - 1));
}
static int multiply(int x, int y) {
if (y != 0)
return (x + multiply(x, y - 1));
else
return 0;
}
}