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



我正在尝试编写一个程序,可以通过迭代计算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();
    }
}

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

其次,你使用的阶乘递归关系是不正确的。你应该这样做。

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

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

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));
    }
}

我看到三个大问题。

首先,"one_answers"是全局的,永远不会被重新分配。因此,随着时间的推移,它将显示一个累积的不正确的值。

另一个是当n> 1时,while循环将永远运行。

最后,递归关系是错误的。应该是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);
 }

类似于@David的解决方案,但更短

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

你的算法也需要工作:

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示例

最新更新