snow爱 2022-02-07 14:53 采纳率: 66.7%
浏览 66
已结题

Java递归方式求斐波那契数代码“解析”,需要详解

请使用递归的方式求出斐波那契数11235813...给你一个整数n,求出它的值是多少
public class RecursionExercise01{
    public static void main(String[] args){
        Figure fi = new Figure();
        int n=fi.rec(8);
        if(n !=-1){
        System.out.println("对应的斐波那契"+n);
    }
    }
}
class Figure{
    public int rec(int num){
        if(num>=1){
        if(num == 1||num == 2){
            return 1;
        }else{
            return rec(num-1)+rec(num-2);
        }
        }
        else{
            System.out.println("要求输入的数>=1");
            return -1;
        }
    }
}

代码是怎么运行的,return rec(num-1)+rec(num-2);递归怎么返回数值的,详细,一定要详细。

  • 写回答

5条回答 默认 最新

  • CCCCCCCYYY_ 2022-02-07 15:08
    关注

    你随便代入一个数进去跑一遍就理解了,就是不断调用函数自身直到底层层层递进返回结果后再累加。
    1.比如rec(4),进到return rec(3)+rec(2);
    1.1但这时候rec(3)没有值返回,他也需要调用一遍rec()这个函数,即rec(3)会进到rec(2)+rec(1);
    1.2这个时候,rec(2) = 1和rec(1) =1有返回值了,这结果就返回到上一步rec(3)这里,即rec(3)=1+1=2;
    2.rec(3)得到结果2后,返回第一步,得rec(4)=2+rec(2);
    3.然后rec(2)会返回1,即rec(4)=2+1=3;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 2月15日
  • 已采纳回答 2月7日
  • 创建了问题 2月7日

悬赏问题

  • ¥200 如何使用postGis实现最短领规划?
  • ¥15 pyinstaller打包错误
  • ¥20 cesm的气溶胶排放文件
  • ¥15 逐月累计,月份不连续,补齐月份
  • ¥15 应用简单的Python代码完成一个学生成绩管理系统
  • ¥15 用matlab求微分方程初值问题
  • ¥15 vscode下编写第三方库opencv与pcl代码时没有代码提示
  • ¥15 能够跑通不报错,如何解决?(标签-matlab)
  • ¥15 MOS在RDS较大,频率高时开关波形异常
  • ¥15 SCENIC分析报错求解答