от цикла к вложенным циклам? - PullRequest
2 голосов
/ 10 мая 2010

У меня есть эта программа, которая возвращает факториал 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); 
        }         
    }
}

Ответы [ 4 ]

2 голосов
/ 10 мая 2010

Если записано как вложенные циклы, это будет выглядеть так:

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.

1 голос
/ 10 мая 2010

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

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 голосов
/ 10 мая 2010

Считаете ли вы рекурсию вложенным циклом?

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 голосов
/ 10 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...