Мне удалось получить результат, если я войду в базу и экспонента, но результат должен быть
Например: вывод должен выглядеть так:
>>
база: 5 показатель: 25 ^ 2 = 25
5 ^ 1 = 5
Мне нужна помощь, чтобы что-то сделать, чтобы это произошло...
import java.util.Scanner;
public class recursion {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
int base = 0;
int expo = 0;
System.out.print("Enter number for base ");
for (int i = 0; i < 1; i++)
base = scanner.nextInt();
System.out.print("Enter number for exponent ");
for (int j = 0; j < 1; j++)
expo = scanner.nextInt();
System.out.println(base + "^" +expo +" = " + pow(base,expo));
}
public static int pow(int x, int p) {
System.out.println(x + "^" +p +" = " );
if (p == 0)
return 1;
if (p % 2 == 0) {
int a = pow(x, (p / 2));
return a * a; // This line
} else {
int a = pow(x, ((p - 1) / 2));
return x * a * a; // This line
}
}
}
Во-первых, следующие фрагменты кода требуют обзора:
{
for (int i = 0; i < 1; i++)
/*
* This for loop is unnecessary.
* It asserts that the following clause is run only once,
* which is true for any statements anyway.
*/
// ...
}
return a * a;
} /* if (p % 2 == 0) */ else {
/*
* Statements are unnecessarily nested within else clause.
* The corresponding then clause does not complete normally.
* Moving the following code snippet out of an else block
* would have the same effect, but simplifies the control
* statements.
*/
int a = pow(x, ((p - 1) / 2));
return x * a * a;
}
В вашем методе pow()
вас есть метод System.out.println()
. Вы вызываете его для отладки, но это необязательно, поскольку процесс возвращается нормально. Поскольку вы ищете печать операций для экспоненты как "от указанного пользователем показателя → 1" ("в порядке убывания"), используйте цикл для печати System.out.println(base + "^" + expo + " = " + TestClass.pow(base, expo));
:
do // New!
System.out.println(base + "^" + expo + " = " + TestClass.pow(base, expo));
while (expo-- > 1); // New!
} /* main( args ) */
и вы можете удалить строку отладки в pow()
.
Пример: (>>
обозначает STDIN)
Введите номер для базы
>>
5
Введите число для экспоненты>>
2
5 ^ 2 = 25
5 ^ 1 = 5
Введите номер для базы
>>
4
Введите номер экспонента>>
5
4 ^ 5 = 1024
4 ^ 4 = 256
4 ^ 3 = 64
4 ^ 2 = 16
4 ^ 1 = 4
void power(int base, int exp){
//Use for loop to iterate through each exp down to 0
for(int i=exp; i>=0; i--){
int result= exponent(base,i);
System.out.println(base + "^" + i + "=" + result)//Will display result as 5^2=25
}
//Рекурсивно вычисляет результат b ^ e.
int exponent(int b, int e){
if(e==0){//Base case occurs when e=0.
return (1);
}
return (b * exponent(b,e-1));
}
String.format
?