这种方法是递归还是迭代的情况?

时间:2014-02-22 17:27:25

标签: java recursion iteration

我一直在努力理解递归,适用于像Fibonacci这样的一些例子以及下面的添加序列。

int AdditiveSequence(int n, int t0, int t1){
    if(n == 0) return t0;
    if(n == 1) return t1;
    return AdditiveSequence(n - 1, t1, t0 + t1);
}

我想过它是如何应用并尝试过的:

static final double PERCENT = 0.005;

double Depreciation(int month, double currentValue){
    if(month == 0)return currentValue;
    return Depreciation(month - 1, currentValue -= currentValue * PERCENT);
}

但这似乎不是递归,更像是迭代,就像我在Eclipse调试屏幕中查看它在月份== 0时退出并且正确返回迭代的currentValue

对于Factorial(n)方法:

int Factorial(f){
    if(f == 1){
      return 1;
    }else{
      return f * Factorial(f - 1);
    }
}

似乎推迟计算直到达到基本情况,然后返回堆栈直到达到结果...

任何人都可以帮助我确定我使用上述折旧方法做了什么,以及它是否实际上是递归或迭代。

2 个答案:

答案 0 :(得分:1)

这实际上称为尾递归,这意味着当到达递归结束时,您将获得结果。这种类型的递归很容易转换为迭代代码,通常由编译器

static final double PERCENT = 0.005;

double Depreciation(int month, double currentValue){
    if(month == 0)return currentValue;
    return Depreciation(month - 1, currentValue -= currentValue * PERCENT);
}

在你的情况下,当前值正在整个累积,这就是它适合尾递归的配置文件的原因。

答案 1 :(得分:1)

我认为AdditiveSequence也必须被称为尾递归,因为它在完成时也会退出 - 即(n == 1)返回t1;因为这满足了计算...