通过迭代从1-9计算阶乘的程序

时间:2011-09-21 03:17:32

标签: java

我正在尝试编写一个可以通过迭代从1-9计算阶乘的程序,但是在我尝试时遇到了一些问题。请帮我弄清楚我的程序中的问题,我只是在学习编程。

以下是我的程序,请告诉我它有什么问题:

public class iterative {
    static int ans=1;
    public static void iteration() {
        System.out.println("n n!");

        for (int n=1; n<10; n++) {
            while ((n-1)>0)
                ans=n*(n-1);
            System.out.println(n + " " + ans);
        }

    }


    public static void main(String[] args) {
        iteration();
    }
}

5 个答案:

答案 0 :(得分:2)

首先,不要为ans使用静态。本地就是你想要的。

其次,您使用的因子递归关系不正确。你应该这样做。

int ans = 1;
for (int n=1; n<=9; n++) {
    ans = ans*n;
    System.out.println(n + " " + ans);
}

答案 1 :(得分:0)

我看到了三个大问题。

首先,“ans”是全球性的,永远不会被重新分配。因此,随着时间的推移,它将显示累积的错误值。

另一个是while循环将永远运行n&gt; 1。

最后,重现关系是错误的。应该是ans = ans *(n-1)。见代码。

你有嵌套循环的事实告诉我你正在尝试打印一个阶乘表。

试试这个:

for (int n=1; n<10; n++) {
    int ans = 1;
    int x = 0;
    while ((n-x)>0){
        ans=ans*(n-x);
        x++;
    }  
    System.out.println(n + " " + ans);
 }

答案 2 :(得分:0)

您的算法也需要运行:

import java.util.*;
import java.lang.*;

class Main
{
    public static void main (String[] args) throws java.lang.Exception
    {
         int i = 1;
         while(i < 10)
            iteration(i++);
    }

    public static void iteration(int max) {
        System.out.println("n n!");
        int ans = 1;
        for (int n=1; n<=max; n++) {
            ans *= n;       
      }
      System.out.println(" " + ans);
}

ideone example

答案 3 :(得分:0)

上面的答案非常接近完美,你也可以通过递归得到它: 这是代码:

public class iterative {

    public static int iteration(int n) {
        int result;
        if(n==1)return n;
        else
        result = n*iteration(n-1);
     return result;
    }


    public static void main(String[] args) {
        System.out.println("Result is :" + iteration(9));
    }
}

答案 4 :(得分:0)

喜欢@David的解决方案,但更短

for(int i=1, ans=1; i <= 9; i++, ans *= i)
   System.out.println(i + " " + ans);