是否有人能够用一些注释行来解释这些方法。他们是为了一个数字。一个是使用递归,实现,另一个是正常的
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 ;
}
答案 0 :(得分:1)
我认为这必须是一项家庭作业,否则它是一种疯狂的做事方式。因此,我可以建议使用集成开发环境(例如Netbeans),然后使用它逐行逐步执行代码。这是了解代码正在做什么的最简单方法。如果我们告诉你,你将无法获得任何收益。
答案 1 :(得分:0)
为什么要尝试用递归或循环解决这么简单的问题?
public static int sq(int n) {
return n * n;
}
就是这样。
答案 2 :(得分: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。