2010-05-10 2 views
2

У меня есть эта программа, которая возвращает факториал N. Например, при вводе 4 ,, он даст 1! , 2! , 3!от цикла до вложенных циклов?

Как я мог преобразовать это, чтобы использовать вложенные циклы?

public class OneForLoop 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in);  
     System.out.print("Enter a number : "); 
     int N = input.nextInt();     
     int factorial = 1; 

     for(int i = 1; i < N; i++) 
     { 
      factorial *= i;   
      System.out.println(i + "! = " + factorial); 
     }   
    } 
} 
+0

Почему вы хотите вложенные петли? Какую цель вы намерены им выполнять? – Eric

+0

'for (int j = 1; j <2; j ++) for (int i = 1; i kennytm

+0

его требование сделать как один цикл, так и вложенный цикл –

ответ

2

Если записать в виде вложенных циклов она будет выглядеть следующим образом:

for (int i = 1; i < N; ++i) 
{ 
    int factorial = 1; 
    for (int j = 1; j <= i; ++j) { 
     factorial *= j; 
    } 
    System.out.println(i + "! = " + factorial); 
} 

Результат:

Enter a number : 10 
1! = 1 
2! = 2 
3! = 6 
4! = 24 
5! = 120 
6! = 720 
7! = 5040 
8! = 40320 
9! = 362880 

Эта программа дает тот же результат, как ваш, он просто занимает больше времени, чтобы сделать это. Что у вас уже хорошо. Отметим также, что факториал функция растет очень быстро так что int будет слишком мал, чтобы удержать результат даже для умеренно больших N.

Если вы хотите включить 10! в результате вы должны изменить условие i < N к i <= N.

+0

нет, он не даст тот же результат попробуйте установить N как 10 и увидеть разницу –

+0

Извините, исправлено. Просто протестируйте его, и обновленная версия работает точно так же, как ваша делает для N = 10. –

+0

убедитесь, что он все еще дает мне разные выходы –

0

Вместо того, чтобы просто вычисляя все в линейной форме, вы могли бы рассмотреть внутренний цикл, который будет делать что-то вроде того, что у вас есть во внешнем контуре. Это то, чего вы пытаетесь достичь?

0

Вы считаете рекурсию вложенной петлей?

public long factorial(int n) 
{ 
    if (n <= 1) 
     return 1; 
    else 
     return n * factorial(n - 1); 
} 

public static void main(String [] args) 
{ 
    //print factorials of numbers 1 to 10 
    for(int i = 1; i <= 10; i++) 
     System.out.println(factorial(i)); 
} 
+0

нет необходимости в петлях вложенных !! –

+0

@WM: Вы никогда не говорили, что это должно быть для цикла. Вы только что сказали «вложенные петли». Рекурсия, конечно, вложен. Это не считается, потому что нет * явного * цикла? – FrustratedWithFormsDesigner

+1

Вы раскалываете волосы :). Рекурсия - это не то, что обычно называют циклом на языке программирования, и это явно не то же самое в домашнем контексте. – IVlad

1

Прямо сейчас вы вычисляете свой факториал постепенно. Просто пересчитывайте это с нуля каждый раз. Имейте в виду, что то, что у вас сейчас, лучше, чем то, что я публикую, но это соответствует вашим требованиям.

public class TwoForLoops 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in);  
     System.out.print("Enter a number : "); 
     int N = input.nextInt();     
     int factorial = 1; 

     for (int i = 1; i < N; ++i) 
     { 
      factorial = 1; 
      for(int j = 1; j <= i; j++) 
      { 
       factorial *= j;   
      } 
      System.out.println(i + "! = " + factorial);   
     } 
    } 
} 
+0

попробуйте установить N до 10 ее и попробуйте там ... они разные –

+0

Ухмм, правда? Потому что я получаю те же результаты на своей машине. Возможно, вы отправили неправильный код. – IVlad

+0

+1 Это также дает правильный ответ, когда я его тестировал. –

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