Как распечатать результат в порядке убывания в Java?

1

Мне удалось получить результат, если я войду в базу и экспонента, но результат должен быть

Например: вывод должен выглядеть так:

>> база: 5 показатель: 2

5 ^ 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
        }

    }

}
  • 0
    Javadoc для String.format ?
  • 0
    Я не совсем понимаю, каков ваш ожидаемый результат?
Показать ещё 4 комментария
Теги:
recursion

2 ответа

1
Лучший ответ

Во-первых, следующие фрагменты кода требуют обзора:

{
    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

Просмотрите демо-версию в реальном времени.

  • 1
    , Большое спасибо за то, что рассказали мне, как я должен делать вещи правильно, и я хотел бы также извиниться, так как я в значительной степени нуб с такими вещами ... это довольно сложно для меня (как-то), так как я Я просто ищу в Интернете, как делать вещи, делать проб и ошибок, а затем понять, как это работает .. Я действительно ценю ваш ответ. Я сделаю все возможное, чтобы улучшить с программированием
  • 0
    @Хару Удачи! :) А если вам нужны бесплатные ресурсы ...
0
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));
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню