需要解释两种不同的方法来寻找因子

时间:2014-03-24 08:58:01

标签: java

我是初学者。我已经学会了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?

4 个答案:

答案 0 :(得分:0)

第一种方法是递归。这并非总是快速而简单。 (如果你不小心,通常会导致StackOverflowError)。第二种方法是正常for循环。在两个方面,两种方法即使在“C”中也是有效的。

我认为你不应该将Java程序与C程序进行比较。这两种语言的设计原因各不相同。

答案 1 :(得分:0)

这些计划有两个主要区别:

  • 程序1使用递归
  • 程序2使用命令式方法
  • 程序1使用一个包含所有程序逻辑的类
  • 程序2在一种方法中具有“像老C程序一样”的所有逻辑

答案 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 behaviorsmain()中重复使用的行为,而在第二种情况下,您将inline代码放入不可重用的代码中。另一个区别是recursion vs iterationfact()基于递归,而inline中的main()代码使用iteration

实现相同的功能