我一直在努力理解递归,适用于像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);
}
}
似乎推迟计算直到达到基本情况,然后返回堆栈直到达到结果...
任何人都可以帮助我确定我使用上述折旧方法做了什么,以及它是否实际上是递归或迭代。
答案 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;因为这满足了计算...