有没有人能用几行评论来解释这些方法。它们是用来求一个数的平方的。一种是使用递归,实现,另一种是正常的
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 ;
} 发布于 2013-04-25 18:15:03
第一个方法是将数字乘以2n倍,使用一个循环来增加一个局部变量,第二个方法是完全相同的,只是使用了递归。,,
,
示例: recSq(2)
4 recSq(2)
|<- 1 reqSq(1)+2*1+1
|<-0 reqSq(0)+2*0 + 1
|<- 0reqSq(2)被调用,因此我们将计算if并开始计算返回语句。第一个操作是当n=2时调用reqSq(n-1)的方法,然后调用reqSq(1)。
reqSq(1)被调用,因此我们将计算if并开始计算返回语句。第一个操作是当n=1时调用reqSq(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。
最后一个是循环,实际上和第一个循环一样,只是使用了
发布于 2013-04-25 18:19:21
我认为这一定是一个家庭作业,否则做任何事情都是一种疯狂的方式。因此,我是否可以建议使用集成开发环境(例如Netbeans),然后使用它逐行逐步执行代码。到目前为止,这是理解代码在做什么的最简单的方法。如果我们只是告诉你,你不会从中得到任何好处。
发布于 2013-04-25 18:14:05
为什么你要用递归或循环来解决这么简单的问题呢?
public static int sq(int n) {
return n * n;
}就这样。
https://stackoverflow.com/questions/16212000
复制相似问题