2013-04-25 106 views
0

任何人都可以用几条注释行解释这些方法。他们是为了打一个数字。一种是使用递归,实现另一种是只是正常Java Square函数

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

它们在结果函数中都是相同的。 sq使用while循环,而implement件sq使用for循环。 recSq是一个递归函数,它为每个递归调用自己调用一个n - 1(直到n等于零)和2 *(n - 1)+1)。 – 2013-04-25 10:14:30

回答

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

例子:recSq(2)

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

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

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

reqSq(0)被调用,所以我们将在EVAL如果这是真的触发N == 0,然后我们返回0

reqSq(1)调用已完成评估reqSq(0),那么我们就可以我们将返回值1.

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

  • 最后一个是for循环,几乎与第一个但是使用fors而不是while循环。在for循环中,您可以在一行中声明初始化条件,继续条件和增加操作。所以在这种情况下,for循环以值0开始,循环将继续,因为我将在012循环结尾处调用“i ++”。
0

为什么你想解决与递归或循环这样一个简单的问题?

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

就是这样。

+0

他可能试图了解他们做了什么,而不是如何排列数字。 – Khanser 2013-04-25 10:17:56

+0

我只是想了解复活和实施 – user2319199 2013-04-25 10:20:30

1

我认为这一定是一个家庭作业练习,否则它是一种疯狂的方式去做任何事情。因此,我可以建议使用集成开发环境(例如Netbeans),然后使用它逐行执行代码。这是了解代码的最简单方法。如果我们只是告诉你,你不会因此而获益。