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日

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作