试图找出递归的基础知识

时间:2015-02-09 22:42:11

标签: java if-statement recursion methods

如果有人可以向我解释我写的这段代码是否与我认为它会产生的代码差不多,那真的很爱。我写了代码试图证明int n将是n = 4所以在我的头脑和纸上我一步一步地认为我的结果如下:

  1. 4 * 4 +(3)= 19
  2. 3 * 3 +(2)= 11
  3. 2 * 2 +(1)= 5
  4. 1 * 1 +(0)= 1
  5. 返回0

    有人可以告诉我为什么不是这样吗?并指导我完成递归步骤?

    public static void main(String[] args) {
    
             Scanner kbd = new Scanner(System.in);
    
             int n;
             System.out.println("Enter a number: ");
             n = kbd.nextInt();
    
            System.out.println("recursive value "+intValue(n));
       }
       public static int intValue(int n)
       {
             int total;
             int x;
            if(n == 0)
               return 0;
            else 
              total = n * n + intValue(n-1);
              System.out.println("Recursive total: "+total);
              return total;
      }
    

3 个答案:

答案 0 :(得分:1)

以下是递归步骤,从n 4开始:

intValue(4)
  n is not 0.  total is 4 * 4 + intValue(3)
  intValue(3)
    n is not 0.  total is 3 * 3 + intValue(2)
    intValue(2)
      n is not 0.  total is 2 * 2 + intValue(1)
      intValue(1)
        n is not 0.  total is 1 * 1 + intValue(0)
        intValue(0)
          n is 0, intValue(0) returns 0.
        1 * 1 + 0 = 1.
        Print Recursive value: 1, intValue(1) returns 1.
      2 * 2 + 1 = 5.
      Print Recursive value: 5, intValue(2) returns 5.
    3 * 3 + 5 = 14.
    Print Recursive value: 14, intValue(3) returns 14.
  4 * 4 + 14 = 30.
  Print Recursive value: 30, intValue(4) returns 30.

回到main,初始调用返回30,然后打印recursive value 30

递归调用不会返回n - 1本身来添加;它会返回以intValue作为参数再次调用n - 1的结果。

答案 1 :(得分:0)

所以你的递归方程是

total = n * n + intValue(n-1);

当你用4运行它时,它就是

4 * 4 + intValue(3)

在这种情况下 intValue(3)

3 * 3 + intValue(2)

在这种情况下 intValue(2)

2 * 2 + intValue(1)

在这种情况下 intValue(1)

1 * 1 + intValue(0)

在这种情况下 intValue(0)

0

在这种情况下返回, intValue(1)

1 * 1 + intValue(0) = 1*1 + 0 = 1;

在这种情况下返回, intValue(2)

2 * 2 + intValue(1) = 2 * 2 + 1 = 5

在这种情况下 intValue(3)

3 * 3 + intValue(2) = 3 * 3 + 5 = 14

在这种情况下 intValue(4)

4 * 4 + intValue(3) = 4 * 4 + 14 = 30

答案 2 :(得分:0)

关于递归的事情是它一直调用自己,直到它到达n == 0返回的点。你试图在纸上解决问题的方式是颠倒的。

在n == 0之前,它不会评估你的等式,并且所有递归调用基本上都是堆叠等待结果。所以它得到了这样的结果,(括号中的每个op都在等待递归调用的结果):

总计= 4 * 4 +(3 * 3 +(2 * 2 +(1 * 1 + 0)))

评估  5.(堆栈顶部),n = 0,返回0
 4. n = 1,1 * 1 + 0,返回1
 3. n = 2,2 * 2 + 1,返回5
 2. n = 3,3 * 3 + 5,返回14
 1. n = 4,4 * 4 + 14,返回30