我是初学者。我已经学会了C.但是现在Java对我来说似乎很难。就像在C编程中一样,我的方法很简单,当我查看Book的程序以完成简单的任务时,例如Factorial,它给出了非常复杂的程序,如下所示 -
class Factorial {
// this is a recursive method
int fact(int n) {
int result;
if(n==1) return 1;
result = fact(n-1) * n;
return result;
}
}
class Recursion {
public static void main(String args[]) {
Factorial f = new Factorial();
System.out.println("Factorial of 3 is " + f.fact(3));
System.out.println("Factorial of 4 is " + f.fact(4));
System.out.println("Factorial of 5 is " + f.fact(5));
}
}
相反,当我制作自己的程序(如下所示)保持简单时,它也很有效并且很容易。谁能告诉我两者之间的区别是什么?
public class Simplefacto {
public static void main(String[] args) {
int n = 7;
int result = 1;
for (int i = 1; i <= n; i++) {
result = result * i;
}
System.out.println("The factorial of 7 is " + result);
}
}
还有谁能告诉我什么是java EE和java SE?
答案 0 :(得分:0)
第一种方法是递归。这并非总是快速而简单。 (如果你不小心,通常会导致StackOverflowError)。第二种方法是正常for循环。在两个方面,两种方法即使在“C”中也是有效的。
我认为你不应该将Java程序与C程序进行比较。这两种语言的设计原因各不相同。
答案 1 :(得分:0)
这些计划有两个主要区别:
答案 2 :(得分:0)
第一种方法是递归。这意味着该方法调用自身,其背后的想法是递归(如果使用得当)可以产生非常干净的代码,就像你的factorial
方法一样。格式正确应该看起来更像:
private int factorial(int n) {
if(n==1) return n;
return fact(n-1) * n;
}
这是一个两行中的因子计算器,非常干净且简短。问题是您可能会遇到大n
的大问题。即臭名昭着的StackOverflowError
。
第二种方法是所谓的迭代方法。迭代方法通常涉及某种形式的循环,并且是递归的另一种选择。它的优点是它们具有非常易读且易于遵循的代码,即使它更冗长,也更冗长。除非n
,否则此代码更加强大且不会因n! > Integer.MAX_VALUE
的大值而失败。
答案 3 :(得分:0)
在第一种情况下,您要添加可在multiple behaviors
或main()
中重复使用的行为,而在第二种情况下,您将inline
代码放入不可重用的代码中。另一个区别是recursion vs iteration
。 fact()
基于递归,而inline
中的main()
代码使用iteration