2016-11-20 3 views
1

Таким образом, существует рекурсивный метод (не может использовать какой-либо цикл), который имеет один параметр n, и программа будет печатать 2^n "*", например, если n равно 2, выход ****, а если n равно 3, то выход будет ********.java Простая рекурсия

Я застрял в этой проблеме, потому что столкнулся с некоторыми проблемами бесконечной рекурсии.

Сначала у меня было это: но я скоро понимаю, что n никогда не достигнет чек.

enter image description here

↑↑↑ Это должно было быть п + 1 (даже если он не работает)

Тогда я попытался это:

public class test { 

    public static void main(String[] args) { 
     printPowerOfTwoStars(3); 

    } 

    public static void printPowerOfTwoStars(int n){ 
     n = (int)Math.pow(2, n); 
     if(n == 0){ 
      return; 
     } 
     else{ 
      System.out.print("*"); 
      printPowerOfTwoStars(n-1); 
     } 

    } 

} 

Столкнулся некоторой бесконечной рекурсии еще раз.

Это похоже на простую программу с простой логикой, но у меня проблемы с проверкой состояния, потому что то, что сравнивается с n, продолжает меняться.

Как исправить эту проблему?

Без использования какого-либо вспомогательного метода или создания каких-либо статических переменных.

Спасибо

ответ

5

Вы должны использовать тот факт, что 2 к силе n является только 2 к силе n-1, в два раза. Ваш базовый корпус состоит в том, что 2 для мощности 0 равен 1.

public static void printPowerOfTwoStars(int n){ 
    if(n <= 0){ 
     System.out.print("*"); 
    } 
    else{ 
     printPowerOfTwoStars(n-1); 
     printPowerOfTwoStars(n-1); 
    } 
} 
+0

Это великолепно! Теперь мне просто интересно, есть ли способ использовать Math.pow в этом случае. Спасибо! – yyin

+0

Я думал, что все дело в том, что _not_ использовать 'Math.pow'. –

+0

Если бы вопрос заключался в том, чтобы печатать 3 раза, как бы реализовать эту проблему? Используя ту же логику, ** 3^n является просто 3^n-1, утроенным (3^n-1) x 3 = 3^n ** ... как бы вы это сделали? Это просто 'printPowerOfTwoStars (n-1);' три раза? – yyin

Смежные вопросы