我在业余时间在网上解决了很多递归问题。我解决的大多数问题都非常简单,并且不要求你将返回语句组合在一起。我最近被要求解决斐波纳契序列并且无法解决,解决方案是:
public static int fib(int n) {
if (n < 0)
throw new IllegalArgumentException("N must be more than zero");
else if (n==0)
return 0;
else if(n==1)
return 1;
else
return fib(n-1) + fib(n-2);
}
我追踪并了解它,我不明白的是我怎么可能自己找到这样的解决方案呢?具体来说,我怎么可能知道同时启动2个递归调用然后来,就像他们在线return fib(n-1) + fib(n-2);
那样。
是否有某种关键指标,我没有看到这应该让我觉得我可能需要激活多个递归调用并将它们组合起来?
我希望将来能够像这样解决递归调用,但我无法看到要识别的行为模式。我如何知道何时在单个堆栈帧中启动多个递归调用?