0

Would anyone be able to explain these methods with a few comments line. They are for squaring a number. One is using recursion, implementation and another is just normal

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

3 回答 3

1

我想这一定是一个家庭作业,否则它是做任何事情的疯狂方式。因此,我是否可以建议使用集成开发环境(例如 Netbeans),然后使用它逐行执行代码。这是迄今为止了解代码在做什么的最简单的方法。如果我们只是告诉你,你不会从中获得任何好处。

于 2013-04-25T10:19:20.877 回答
0

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

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

而已。

于 2013-04-25T10:14:05.120 回答
0
  • 第一个是使用循环将数字乘以 2 n 次以增加局部变量 i。
  • 第二个是完全一样的,但使用递归。每一步减少 n 并为最终情况返回 0。所有的调用都是用不同的参数再次调用同一个函数,除了参数值为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 -> 0 + 0 + 1。我们将返回值 1。

reqSq(2) 已完成对 reqSq(1) 的评估,然后我们可以继续计算其余的 1 + 2*(n-1) +1 -> 1 + 2 + 1。我们将返回值 4。

  • 最后一个是 for 循环,实际上与第一个相同,但使用 fors 而不是 while 循环。在 for 循环中,您在一行中声明了初始化条件、继续条件和增加操作。因此,在这种情况下,for 循环从值 0 开始,循环将在 i < n 时继续,并且在循环结束时将调用“i++”。
于 2013-04-25T10:15:02.573 回答