2017-10-28 101 views
2

我想学习递归,它的行为真的很奇怪。我有以下简单的方法来减少给定的值和总和偶数,直到值变为0.然而,一旦值= 0,它开始只访问递归调用(在IF-ELSE条件下)并开始增加我的价值回来,并再次添加,直到它回到初始值。我录制了2个截屏视频。例如,如果我在类中创建主方法并使用5执行方法,例如,我会接收输出6,这是正确的,但是在JUnit测试中,对于相同的值,它期望,但实际值为!我不确定我做错了什么。而且,一旦数值达到0,我是否返回正确的东西?我不知道如何返回和那里,但在同一时间有总和返回方法本身的输出..递归递减值然后意外递增

class EvenSums { 
    private static int sum = 0; 

    public static int sumEvenRec(int n) { 
    int input = n; 

    if(input <= 0) { 
     return 0; 
    } else { 
     if(input % 2 == 0) { 
      sum += input; 
     } 
     sumEvenRec(input-1); 
    } 
    return sum; 
} 

这里的调试截屏(注意输入的降低后升高值)并注意它是如何从回归和回归到以某种方式增加输入值的递归函数。 DEBUG SCREENCAST

在测试截屏可以看到:
对于输入2:java.lang.AssertionError: expected:<2> but was:<58>
对于输入5:java.lang.AssertionError: expected:<6> but was:<64>
对于输入6:java.lang.AssertionError: expected:<12> but was:<76>

Intrestingly,对于输入:作品
TEST SCREENCAST

回答

0

你的JVM的同一运行过程中做很多测试,因此静态字段sum保持从之前的测试(这就是为什么静态变量应避免或非常小心使用的原因),它的价值。

您应该消除该字段并将该和作为递归调用的返回值(您已经返回一个值,但以不同方式进行)。

+0

天哪,工作!谢谢!删除了静态并创建了一个对象。是!谢谢! – WannaBeForNow