仅使用一个while循环执行阶乘

时间:2014-10-29 11:52:07

标签: java math factorial

我试图找到9的阶乘到0,只使用一个while循环,但我的想法是不输出一个值。

我想出了使用两个while循环的方法:

    int i;
    count = 9;
    while (count >= 0){
        value = count;
        i = count-1;
        while (i > 0){
            value = value * i;
            i--;
        }
        System.out.print(value + ", ");
    }

这很有用,但是我试图改变它只使用一个while循环并得到了这个:

    int i;
    for (count = 9; count < 0; count--){
        value = count;
        i = count-1;
        while (i > 0){
            value = value * i;
            i--;
        }
        System.out.print(value + ", ");
    }

我不完全确定我是否正确使用for语句,但我认为我是,或者至少我认为它应该输出一些东西,所以我可以调试它。

有人能给我一个正确方向的暗示吗?

4 个答案:

答案 0 :(得分:4)

这将为您提供从9到1的所有因子:

int i=1;
int value=1;
String res = "";
while (i <= 9){
  value = value * i;
  res = value + ((i>1)?",":"") + res;
  i++;
}
System.out.print(res);

输出:

362880,40320,5040,720,120,24,6,2,1

也许是在作弊,因为我按照从1!9!的升序计算阶乘,但是我按顺序颠倒了输出的顺序得到所需的结果。

编辑:

如果你也想要0!要打印,一个小小的改变可以做到这一点:

int i=1;
int value=1;
String res = "";
while (i <= 10){
  res = value + ((i>1)?",":"") + res;
  value = value * i;
  i++;
}
System.out.print(res);

输出:

362880,40320,5040,720,120,24,6,2,1,1

答案 1 :(得分:1)

首先分配value = i,然后运行循环。你可以只使用while循环获得阶乘。

重要提示:因为n!=n*(n-1)!因此i--必须在value = value * i之前执行。

  public static void main(String args[]) {

            int value=5;
            int i=value; 
                while (i > 1){

                    i--;
                    value = value * i;
                }
                System.out.print(value);

    }

更新:如果你想计算0到9的阶乘,那么使用这个代码:(它还包括因子0)

  public static void main(String args[]){
        int countLowest=0; 
        int countHighest=9; 
        int value=1;


                while (countLowest<= countHighest){
                if(countLowest==0)
                    value = value * (countLowest+1);
                else
                    value=value*countLowest;
                countLowest++;
                System.out.println("Factorial of "+(countLowest-1)+" is "+value);
                }

    }

<强>结果:

Factorial of 0 is 1
Factorial of 1 is 1
Factorial of 2 is 2
Factorial of 3 is 6
Factorial of 4 is 24
Factorial of 5 is 120
Factorial of 6 is 720
Factorial of 7 is 5040
Factorial of 8 is 40320
Factorial of 9 is 362880

答案 2 :(得分:1)

首先,你的第二个循环不起作用的原因是for中的条件错误。中间的条件是导致循环继续,而不是停止。所以你所说的是“从9开始,在数字小于0时工作”。但是,当然,你的数字一开始就大于零。

其次,我认为使用for循环有点作弊,因为for循环只是while循环的特定情况。

现在解决了阶乘本身的问题。你知道一个阶乘n!定义为(n-1)!* n。

计算一个特定阶乘的基本循环是:

int n = 5;
int factorial = 1;

while ( n > 0 ) {
    factorial *= n;
    n--;
}

System.out.println( "Factorial is: " + factorial );

这将给你五个阶乘。但它并不完全基于我们所谈论的公式。还有另一种计算方法,从1开始:

int n = 5;
int factorial = 1;
int count = 1;
while ( count <= n ) {
   factorial *= count;
   count++;
}
System.out.println( "Factorial is " + factorial );

关于这种方式的有趣部分是,在循环的每个阶段,factorial实际上是值(count-1)!我们将它乘以计数。这正是我们谈论的公式。

关于它的好处是,在你做之前,你有前一个阶乘的价值。因此,如果您打印出来,那么您将获得所有因子的列表。所以这是一个修改过的循环,打印所有的阶乘。

int n = 9;
int factorial = 1;
int count = 0;
while ( count < n ) {
   System.out.println( "Factorial of " + count + " is " + factorial );
   count++;
   factorial *= count;
}
System.out.println( "Factorial of " + n + " is " + factorial );

请注意,我对它进行了一些修改,以便它可以使用零。阶乘零是一个特例,所以我们不应该乘以零 - 这将使所有阶乘都错误。所以我在将count增加到1之后才将循环更改为乘法。但这也意味着你必须在循环中打印最终的阶乘。

答案 3 :(得分:0)

 count = 9;
sum=1;
while (count >= 1){
sum*=count;
--count;
 }
    System.out.print(sum);

它会给你9!= 362880