Java Square功能

时间:2013-04-25 10:10:10

标签: java recursion implementation

是否有人能够用一些注释行来解释这些方法。他们是为了一个数字。一个是使用递归,实现,另一个是正常的

 public static int sq(int n)
{
    int i = 0 ;
    int result = 0 ;

    while(i < n){         
        result = result + 2*i + 1 ;
        i = i + 1 ;
    }
    return result ;
}

public static int recSq(int n)
{
    if(n == 0){
        return 0 ;
    } else {
        return recSq(n - 1) + 2*(n - 1) + 1 ;
    }
}

public static int implementSq(int n)
{
    int i ;
    int result = 0 ;

    for(i = 0 ; i < n ; i++){
        result = result + 2*i + 1 ;       
    }
    return result ;
} 

3 个答案:

答案 0 :(得分:1)

我认为这必须是一项家庭作业,否则它是一种疯狂的做事方式。因此,我可以建议使用集成开发环境(例如Netbeans),然后使用它逐行逐步执行代码。这是了解代码正在做什么的最简单方法。如果我们告诉你,你将无法获得任何收益。

答案 1 :(得分:0)

为什么要尝试用递归或循环解决这么简单的问题?

public static int sq(int n) {
    return n * n;
}

就是这样。

答案 2 :(得分:0)

  • 第一个是使用循环将数字乘以2 n次以增加局部变量i。
  • 第二个是完全相同但使用递归。每一步减少n并为最终情况返回0。所有的调用再次调用相同的函数,不同的参数exept为参数值0,然后函数将返回0.递归不是一个简单的思考,理解它更好地试图想象代码流。

示例:recSq(2)

  4 recSq(2)
  |<- 1  reqSq(1)+2*1+1
      |<-0  reqSq(0)+2*0 + 1
         |<-  0

reqSq(2)被调用,所以我们将评估if并开始评估return语句。第一个操作是对reqSq(n-1)的方法调用,因为n = 2然后我们调用reqSq(1)。

调用reqSq(1),因此我们将评估if并开始评估return语句。第一个操作是对reqSq(n-1)的方法调用,因为n = 1然后我们调用reqSq(0)。

调用reqSq(0)所以我们将评估if,这是真的因为n == 0然后我们返回0。

reqSq(1)调用已经完成了对reqSq(0)的评估,然后我们可以继续计算其余的0 + 2 *(n-1)+ 1 - &gt; 0 + 0 + 1.我们将返回值1。

reqSq(2)已经完成了对reqSq(1)的评估,然后我们可以继续计算剩余的1 + 2 *(n-1)+1 - &gt; 1 + 2 + 1.我们将返回值4。

  • 最后一个是for循环,几乎与第一个相同,但是使用fors而不是while循环。在for循环中,您在一行中声明初始化条件,继续条件和增加操作。因此,在这种情况下,for循环以值0开始,循环将继续为i&lt; n并且在循环结束时将调用“i ++”。