Recursion 如何知道何时在单个堆栈帧内启动多个递归调用?

Recursion 如何知道何时在单个堆栈帧内启动多个递归调用?,recursion,Recursion,我在业余时间在线解决很多递归问题。我解决的大多数问题都非常简单,不需要合并returns语句。我最近被要求求解斐波那契序列,但无法,解决方案是: 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;

我在业余时间在线解决很多递归问题。我解决的大多数问题都非常简单,不需要合并returns语句。我最近被要求求解斐波那契序列,但无法,解决方案是:

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);
}
公共静态int fib(int n){
if(n<0)
抛出新的IllegalArgumentException(“N必须大于零”);
else如果(n==0)
返回0;
else如果(n==1)
返回1;
其他的
返回fib(n-1)+fib(n-2);
}
我追根究底,明白了,我不明白的是,我怎么可能自己找到这样的解决方案呢?具体地说,我怎么可能知道同时启动两个递归调用,然后调用它们,就像它们在第行
返回fib(n-1)+fib(n-2)中所做的那样

是否有一些我没有看到的关键指标会提醒我可能需要激活多个递归调用并将它们组合起来

我希望将来能够解决类似这样的递归调用,但我看不到需要识别的行为模式。我如何知道何时在一个堆栈帧内启动多个递归调用?

这仅仅是因为斐波那契级数的定义是
F(n)=F(n-1)+F(n-2)
,如果n<2,则
F(n)=n。因此,该定义已经涉及两个递归调用。如果您喜欢解决递归问题,我建议您尝试学习Scheme语言,并在此处浏览[Scheme]标记。是最容易开始的实现。这真的让我对递归有所了解。