Java 如何递归地计算一个升为幂的数?
我试过:Java 如何递归地计算一个升为幂的数?,java,Java,我试过: static public void power(int n, int X) { System.out.print( + " "); if (n>0) { power(n-1, X); } } 这不会产生一个值,因为我不知道该如何做。试试这个-> public class HelloWorld{ public long powerfun(int n,int power,long val
static public void power(int n, int X) {
System.out.print( + " ");
if (n>0) {
power(n-1, X);
}
}
这不会产生一个值,因为我不知道该如何做。试试这个->
public class HelloWorld{
public long powerfun(int n,int power,long value){
if(power<1){
return value;
}
else{
value = value * n;
return powerfun(n,power-1,value);
}
}
public static void main(String []args){
HelloWorld hello = new HelloWorld();
System.out.println(hello.powerfun(5,4,1));
}
}
试试这个->
public class HelloWorld{
public long powerfun(int n,int power,long value){
if(power<1){
return value;
}
else{
value = value * n;
return powerfun(n,power-1,value);
}
}
public static void main(String []args){
HelloWorld hello = new HelloWorld();
System.out.println(hello.powerfun(5,4,1));
}
}
试试这个
public int calculatePower(int base, int powerRaised)
{
if (powerRaised != 0)
return (base*calculatePower(base, powerRaised-1));
else
return 1;
}
试试这个
public int calculatePower(int base, int powerRaised)
{
if (powerRaised != 0)
return (base*calculatePower(base, powerRaised-1));
else
return 1;
}
希望这能满足您的解决方案。我试着添加注释,向您解释逻辑
//Creating a new class
public class RecursivePower {
// Create the function that will calculate the power
// n is the number to be raised to a power
// x is the number by which we are raising n
// i.e. n^x
public static int power(int n, int x){
// Anything raised to the 0th power is 1
// So, check for that
if (x != 0){
// Recursively call the power function
return (n * power(n, x-1));
// If that is true...
}else{
return 1;
} //end if else
} //end power
// Example driver function to show your program is working
public static void main(String[] args){
System.out.println("The number 5 raised to 6 is " + power(5,6));
System.out.println("The number 10 raised to 3 is " + power(10,3));
} //end psvm
} //end RecursivePower
希望这能满足您的解决方案。我试着添加注释,向您解释逻辑
//Creating a new class
public class RecursivePower {
// Create the function that will calculate the power
// n is the number to be raised to a power
// x is the number by which we are raising n
// i.e. n^x
public static int power(int n, int x){
// Anything raised to the 0th power is 1
// So, check for that
if (x != 0){
// Recursively call the power function
return (n * power(n, x-1));
// If that is true...
}else{
return 1;
} //end if else
} //end power
// Example driver function to show your program is working
public static void main(String[] args){
System.out.println("The number 5 raised to 6 is " + power(5,6));
System.out.println("The number 10 raised to 3 is " + power(10,3));
} //end psvm
} //end RecursivePower
将X视为数字,n视为幂,如果两者都是正整数
public static int power(int n, int X) {
if (n == 0) {
return 1;
} else if(n == 1) {
return X;
} else {
return X * power(n-1, X);
}
}
将X视为数字,n视为幂,如果两者都是正整数
public static int power(int n, int X) {
if (n == 0) {
return 1;
} else if(n == 1) {
return X;
} else {
return X * power(n-1, X);
}
}
让我们重新编写函数:
static public void power(int n, int X) {
System.out.print( + " ");
if (n>0) {
power(n-1, X);
}
}
首先,让我们将void更改为int
之后,当n等于1时,我们将结果返回为X,因为X^1=X:
让我们重新编写函数:
static public void power(int n, int X) {
System.out.print( + " ");
if (n>0) {
power(n-1, X);
}
}
首先,让我们将void更改为int
之后,当n等于1时,我们将结果返回为X,因为X^1=X:
其他人有书面的解决方案,可以给你正确的答案,但是他们的时间复杂度是开着的,因为你只减少了1的功率。下面的解决方案将花费更少的时间。这里的诀窍是
x^y = x^(y/2) * x^(y/2)
所以我们只需要计算x^y/2,然后求平方。如果y是偶数,那么就没有问题了,但当y是奇数时,我们必须将它乘以x。比如说
3^5=3^5/2*3^5/2
但是5/2=2,所以上面的方程会变成3^2*3^2,所以我们必须再乘以3,然后它会变成3*3^5/2*3^5/2
那么3^2将被计算为3^2/1*3^2/1,这里不需要乘以3。
我希望这是清楚的
Scanner s = new Scanner(System.in) ;
System.out.println("Enter n");
int n = s.nextInt();
System.out.println("Enter x");
int x =s.nextInt();
if (n>0){
double pow =Math.pow(n,x);
System.out.println(pow);
}
其他人有书面的解决方案,可以给你正确的答案,但是他们的时间复杂度是开着的,因为你只减少了1的功率。下面的解决方案将花费更少的时间。这里的诀窍是
x^y = x^(y/2) * x^(y/2)
所以我们只需要计算x^y/2,然后求平方。如果y是偶数,那么就没有问题了,但当y是奇数时,我们必须将它乘以x。比如说
3^5=3^5/2*3^5/2
但是5/2=2,所以上面的方程会变成3^2*3^2,所以我们必须再乘以3,然后它会变成3*3^5/2*3^5/2
那么3^2将被计算为3^2/1*3^2/1,这里不需要乘以3。
我希望这一点很清楚虽然其他人在代码方面为您提供了解决方案,但我想重点介绍一下您的代码不起作用的原因
Scanner s = new Scanner(System.in) ;
System.out.println("Enter n");
int n = s.nextInt();
System.out.println("Enter x");
int x =s.nextInt();
if (n>0){
double pow =Math.pow(n,x);
System.out.println(pow);
}
递归是一种编程技术,其中方法函数调用自身。所有递归都具有两个特定特征:
当它调用自己时,它这样做是为了解决一个较小的问题。在您的示例中,为了将X提高到N的幂,该方法使用参数X和N-1递归地调用自己,也就是说,每进一步一步都解决一个较小的问题。
最终有一个版本的问题是微不足道的,这样递归就可以解决它,而无需调用自身并返回。这称为基本情况。
如果你熟悉数学归纳法,递归就是它的编程等价物
上面第二点是您的代码所缺少的。您的方法从不返回任何数字。在将一个数字提升到一个幂的情况下,基本情况是解决数字0的问题,因为将零提升到任何幂都会产生一个,因此代码不需要再次调用自身来解决这个问题
因此,正如其他人已经建议的,您需要对代码进行两个更正:
为方法添加一个返回类型。
明确说明基本情况。
虽然其他人在代码方面为您提供了解决方案,但我想重点介绍一下为什么您的代码不起作用 递归是一种编程技术,其中方法函数调用自身。所有递归都具有两个特定特征: 当它调用自己时,它这样做是为了解决一个较小的问题。在您的示例中,为了将X提高到N的幂,该方法使用参数X和N-1递归地调用自己,也就是说,每进一步一步都解决一个较小的问题。 最终有一个版本的问题是微不足道的,这样递归就可以解决它,而无需调用自身并返回。这称为基本情况。 如果你熟悉数学归纳法,递归就是它的编程等价物 上面第二点是您的代码所缺少的。您的方法从不返回任何数字。在将一个数字提升到一个幂的情况下,基本情况是解决数字0的问题,因为将零提升到任何幂都会产生一个,因此代码不需要再次调用自身来解决这个问题 因此,正如其他人已经建议的,您需要对代码进行两个更正: 为方法添加一个返回类型。 明确说明基本情况。
记住,这对负能量不起作用,你需要使用这段代码->记住,这对负能量不起作用,你需要使用这段代码->我认为OP不打算使用内置的pow功能。其次,您的代码在语法上是错误的。它不会编译。第三,即使你纠正了语法。它给出了错误的o/p。请更正它。在i/p n=5和x时,它给出了什么o/p=
3.你的代码是64。我已经编辑了你的代码,现在它是正确的。请看,哦!问题是n-1谢谢,我是说你的原始代码是。第6行缺少大括号。是的,n-1给出了错误的答案。很好,我想OP不是有意使用内置pow功能的。其次,您的代码在语法上是错误的。它不会编译。第三,即使你纠正了语法。它给出了错误的o/p。请更正。在i/p n=5和x=3时,它给出了什么o/p?你的代码是64。我已经编辑了你的代码,现在它是正确的。请看,哦!问题是n-1谢谢,我是说你的原始代码是。第6行缺少大括号。是的,n-1给出了错误的答案。不客气