Метод рекурсивной экспоненты

public static int exponent(int baseNum) {
    int temp = baseNum *= baseNum;                

        return temp * exponent(baseNum);             
}

Прямо сейчас описанный выше метод превращает n * n в бесконечность, если я его отлаживаю, поэтому он все еще работает, но мне нужно, чтобы этот рекурсивный метод останавливался после 10 раз, потому что мой инструктор требует, чтобы мы нашли показатель степени, заданный степенью 10.

Метод должен иметь только один параметр, вот несколько примеров вызова экспоненты:

                System.out.println ("The power of 10 in " + n + " is " + 
                    exponent(n));

Итак, вывод должен быть:

The power of 10 in 2 is 1024

OR

The power of 10 in 5 is 9765625

person Matt Andrzejczuk    schedule 01.11.2012    source источник
comment
В вашем рекурсивном методе нет базового случая!   -  person Luiggi Mendoza    schedule 01.11.2012
comment
Если вам нужно, чтобы он останавливался после десяти раз, вам нужна переменная для того, сколько раз он повторяется.   -  person Louis Wasserman    schedule 01.11.2012
comment
Вам нужно передать мощность в качестве аргумента, например power(baseName, n); уменьшать мощность на единицу каждый раз, когда вы рекурсивно.   -  person Peter Lawrey    schedule 01.11.2012


Ответы (6)


Создайте вспомогательный метод для выполнения рекурсии. У него должно быть два аргумента: основание и показатель степени. Вызовите его со значением 10 для показателя степени и заставьте его рекурсивно использовать (показатель степени-1). Базовый случай — exponent == 0, и в этом случае он должен возвращать 1. (Вы также можете использовать exponent == 1 в качестве базового случая, и в этом случае он должен возвращать основание.)

person Ted Hopp    schedule 01.11.2012

Сделайте что-нибудь вроде

public static int exp(int pow, int num) {
    if (pow < 1) 
        return 1; 
    else
        return num * exp(pow-1, num) ;
}

public static void main (String [] args) {     
    System.out.println (exp (10, 5));
}

и не забывайте базовый случай (т.е. условие), которое говорит, когда остановить рекурсию и извлечь значения из стека.

person mu_sa    schedule 01.11.2012

Ниже приводится то, что мой преподаватель, профессор Пенн Ву, предоставил в своих лекциях.

public class Exp
{
public static int exponent(int a, int n)
{
if (n==0) { return 1; } // base
else // recursion
{
a *= exponent(a, n-1);
return a;
}
}
public static void main(String[] args)
{
System.out.print(exponent(2, 10));
}
}
person JavaStudent    schedule 13.09.2015

Разве он не должен иметь 2 параметра и обрабатывать условие выхода, как показано ниже?

public static int exponent(int baseNum, int power) {
   if(power == 0){
      return 1;
   }else{ 
      return baseNum * exponent(baseNum, power-1);  
   }           
}
person Yogendra Singh    schedule 01.11.2012

Для функции рекурсии нам нужно:

  1. проверить условие остановки (т.е. когда exp равно 0, вернуть 1)
  2. вызвать себя с откорректированным условием (т.е. base * base^(n-1))

Вот код.

public class Test
{
    public static int exponent(int baseNum, int exp)
    {
        if (exp<=0)
            return 1;

        return baseNum * exponent(baseNum, --exp);
    }

    public static void main(String a[])
    {
        int base=2;
        int exp =10;

        System.out.println("The power of "+exp+" in "+base+" is "+exponent(base,exp));
    }

}
person user1500049    schedule 01.11.2012

Не забывайте, что для каждой рекурсивной функции вам нужен базовый случай. Условие остановки` static double r2(float base, int n) {

    if (n<=0) return 1;
    return  base*r2(base,n-1);

}
person bachstein    schedule 16.08.2015