我正在尝试编写一个可以通过迭代从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();
}
}
答案 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);
}
答案 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);