Java 使用带递归的for循环
因此,我试图打印出递归指数方法的实际过程,然后是最终的值,但是我的for循环有问题。例如,如果用户输入4到4次方,它应该打印出4到4,4到3,4到2,等等,然后打印出正确的4到4次方的值,但最终我得到的值是0Java 使用带递归的for循环,java,Java,因此,我试图打印出递归指数方法的实际过程,然后是最终的值,但是我的for循环有问题。例如,如果用户输入4到4次方,它应该打印出4到4,4到3,4到2,等等,然后打印出正确的4到4次方的值,但最终我得到的值是0 import java.util.Scanner; public class Recursion { public static void main(String[] args) { Scanner input = new Scanner(System.in);
import java.util.Scanner;
public class Recursion
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter base: ");
int baseNum = input.nextInt();
System.out.println("Enter exponent: ");
int expNum = input.nextInt();
for(int i = 1; i <= baseNum; ++i)
{
System.out.printf("\n%d to the %d", baseNum, expNum--);
}
System.out.printf("\nValue is %d",power(baseNum, expNum));
}
public static int power(int base, int exponent)
{
if(base == 0)
return 1;
else
return exponent * power(base - 1, exponent);
}
}
import java.util.Scanner;
公共类递归
{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入基:”;
int baseNum=input.nextInt();
System.out.println(“输入指数:”);
int expNum=input.nextInt();
对于(int i=1;i,幂运算的递归定义是
x^n = x * x^(n-1)
请注意,指数减少,而不是基数。指数化的递归定义是
x^n = x * x^(n-1)
请注意,指数减小,而不是基数。您将基数与指数混淆。幂法的定义如下:
public static int power(int base, int exponent) {
if(exponent == 0) {
System.out.println(1); // for display
return 1;
}
else {
int rem = power(base, exponent-1);
if (rem > 1) {
System.out.println(rem); // for display
}
return base * rem;
}
}
用法
public static void main(String[] args) {
System.out.println(power(4,2)); // prints 16
}
你把基数和指数搞混了。幂法的定义如下:
public static int power(int base, int exponent) {
if(exponent == 0) {
System.out.println(1); // for display
return 1;
}
else {
int rem = power(base, exponent-1);
if (rem > 1) {
System.out.println(rem); // for display
}
return base * rem;
}
}
用法
public static void main(String[] args) {
System.out.println(power(4,2)); // prints 16
}
幂=基数提升到指数。你做得不对。正确的方法-
public static int power(int base, int exponent) {
if(exponent == 0)
return 1;
else
return base * power(base, exponent-1);
}
要使上述代码显示中间结果:
import java.util.Scanner;
public class Recursion {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter base: ");
int baseNum = input.nextInt();
System.out.println("Enter exponent: ");
int expNum = input.nextInt();
int pow = power(baseNum, expNum);
}
public static int power(int base, int exponent) {
int pow = 0;
if (exponent == 0) {
pow = 1;
System.out.println(base + " raised to " + exponent + " is " + pow);
} else {
pow = base * power(base, exponent - 1);
System.out.println(base + " raised to " + exponent + " is " + pow);
}
return pow;
}
幂=基数提升到指数。你做得不对。正确的方法-
public static int power(int base, int exponent) {
if(exponent == 0)
return 1;
else
return base * power(base, exponent-1);
}
要使上述代码显示中间结果:
import java.util.Scanner;
public class Recursion {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter base: ");
int baseNum = input.nextInt();
System.out.println("Enter exponent: ");
int expNum = input.nextInt();
int pow = power(baseNum, expNum);
}
public static int power(int base, int exponent) {
int pow = 0;
if (exponent == 0) {
pow = 1;
System.out.println(base + " raised to " + exponent + " is " + pow);
} else {
pow = base * power(base, exponent - 1);
System.out.println(base + " raised to " + exponent + " is " + pow);
}
return pow;
}
您的代码有两个问题
指数在您实际使用它之前发生了变异
在幂()中反转基数和指数
下面是代码的编辑版本,可以正常工作
import java.util.Scanner;
public class Recursion
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter base: ");
int baseNum = input.nextInt();
System.out.println("Enter exponent: ");
int expNum = input.nextInt();
for (int i = 1; i <= expNum; ++i)
{
System.out.printf("\n%d to the %d", baseNum, i);
}
System.out.printf("\nValue is %d", power(baseNum, expNum));
}
public static int power(int base, int exponent)
{
if (exponent == 0)
{
return 1;
}
else
{
return base * power(base, exponent - 1);
}
}
}
import java.util.Scanner;
公共类递归
{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入基:”;
int baseNum=input.nextInt();
System.out.println(“输入指数:”);
int expNum=input.nextInt();
对于(inti=1;i,您的代码有两个问题
指数在您实际使用它之前发生了变异
在幂()中反转基数和指数
下面是代码的编辑版本,可以正常工作
import java.util.Scanner;
public class Recursion
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter base: ");
int baseNum = input.nextInt();
System.out.println("Enter exponent: ");
int expNum = input.nextInt();
for (int i = 1; i <= expNum; ++i)
{
System.out.printf("\n%d to the %d", baseNum, i);
}
System.out.printf("\nValue is %d", power(baseNum, expNum));
}
public static int power(int base, int exponent)
{
if (exponent == 0)
{
return 1;
}
else
{
return base * power(base, exponent - 1);
}
}
}
import java.util.Scanner;
公共类递归
{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入基:”;
int baseNum=input.nextInt();
System.out.println(“输入指数:”);
int expNum=input.nextInt();
for(int i=1;i)你应该从指数中减去一,而不是基数。当你在for循环后调用power()时,expNum不是它开始时的值。是的,我看到了,但是我如何改变它,并向用户显示发生了什么。你应该从指数中减去一,而不是基数。当你调用power()时在for循环之后,expNum不是它开始时的值是的,我看到了,但是我如何改变它,并向用户显示正在发生的事情。我认为我的方法不适用,但当我没有使用for循环时,它给了我正确的值。当我在for循环中打印它时,就像我在代码中一样,该值不起作用。我需要向用户显示它到底是什么oing.@user3772253当然“不起作用”:for循环调用power()
,计算值,然后在循环中运行另一个迭代,使用不同的值调用power()
。如果要“向用户显示计算的阶段”,应该打印power(基数,指数-1)的值
在else
部分中,在返回之前
@user3772253查看新编辑,它将显示所有“阶段”在计算过程中,我认为我的方法有问题,但当我没有使用for循环时,它给了我正确的值。当我在for循环中打印它时,就像我在代码中一样,该值不起作用。我需要向用户显示它到底在做什么。@user3772253当然它“不起作用”:for循环调用power()
计算值,然后在循环中运行另一个迭代,该循环使用不同的值调用power()
。如果要“向用户显示计算阶段”,应打印power(基数,指数-1)的值
在else
部分中,在返回之前
@user3772253查看新编辑,它将显示所有“阶段”在计算中,这一切都是有意义的,谢谢你。但是,输出应该是反转的。为什么,我不知道,但是像5到5,5到4,5到3等等。当我反转++I,到-,我的输出一直在继续,所以我试图反转它。如果可能的话,如果没有,那就这样吧。我更清楚地理解它,所以我很高兴将++i反转为--i是指for循环从i=1开始,只有当它违反停止条件“i=1;--i”时才会停止这一切都是有道理的,谢谢你。但是,输出应该是反向的。为什么,我不知道,但是像5到5,5到4,5到3等等。当我反向++时,我,到-,我的输出一直在继续,所以我试图反向。如果可能的话,如果不可能的话,那就这样吧。我更清楚地理解它,所以我很高兴。反向++的问题我想--i表示for循环从i=1开始,只有当它违反停止条件“i=1;--i”时才会停止