老师这种单递归很容易理解,一看就知道怎么写。但是碰到像例题双重递归怎么理解

老师这种单递归很容易理解,一看就知道怎么写。但是碰到像例题双重递归怎么理解

//补充代码
function fun(n){
    if(n==1){return '我的小鲤鱼'}
    return '抱着'+fun(n-1)+'的我'
}
document.write('吓得我抱起了'+'<br>')
document.write(fun(5)) 

我即使知道什么意思还用2叉树图画出来了但是还是没有办法用中文方式代入理解,就是如何更形象具体点理解,年薪这个还好,斐波那契数列涉及到索引感觉太绕了,没办法再脑里预判
图片描述图片描述

图片描述

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,问题解答如下:

1、可以结合代码的执行过程理解,这个计算过程是计算机在底层帮我们去做的,不会显示的展示出来,这里是为了方便同学理解,示例:

当执行fn(5)这句代码,调用fn函数时,过程如下

f(5) = "抱着" + fn(4) + "的我"

f(4) = "抱着" + fn(3) + "的我"

f(3) = "抱着" + fn(2) + "的我"

f(2) = "抱着" + fn(1) + "的我"

f(1) = "我的小鲤鱼"

根据f(1)的值倒推到f(5)值

f(2) = "抱着" + fn(1) + "的我" = "抱着 我的小鲤鱼 的我"

f(3) = "抱着" + fn(2) + "的我" = "抱着 抱着 我的小鲤鱼 的我 的我"

f(4) = "抱着" + fn(3) + "的我" = "抱着 抱着 抱着 我的小鲤鱼 的我 的我 的我"

f(5) = "抱着" + fn(4) + "的我" = "抱着 抱着 抱着 抱着 我的小鲤鱼 的我 的我 的我 的我"

所以最终结果为"抱着 抱着 抱着 抱着 我的小鲤鱼 的我 的我 的我 的我"

2、斐波那契数列也是同样的思路,以fib(5)为例:

fib(5) = fib(4) + fib(3)

fib(4) = fib(3) + fib(2)

fib(3) = fib(2) + fib(1)

fib(2) = fib(1) + fib(0)

fib(1) = 1

fib(0) = 1

根据fib(1)和fib(0)的值倒推

fib(2) = fib(1) + fib(0) = 1 + 1 = 2

fib(3) = fib(2) + fib(1) = 2 + 1 = 3

fib(4) = fib(3) + fib(2) = 3 + 2 = 5

fib(5) = fib(4) + fib(3) = 5 + 3 = 8

所以最终可以得到fib(5)的值为8

递归的内容都不太好理解,想不明白是正常的,压力不用太大。js部分,并不需要所有内容都听懂学会,学会70%就相当不错了,很多内容短时间内是捉摸不透的,要学会取舍,再加上js逻辑这种东西,并不是逼自己就能明白的,所以一定不要压力过大。

学不会的东西,建议暂时记下来,有空就回头看看,多来几次,说不定哪天就灵机一动、醍醐灌顶了。递归的内容,同学可以将具体的数据代入代码,一步步分析代码怎么执行,最后输出的结果是什么样的,会分析代码逻辑就可以了。

祝学习愉快~

  • 慕的地9440514 提问者 #1

    老师这样一写大概懂了,侧重点是假设性索引,确保前两项(索引0):1(索引1):1的值是1从而不影响运算第3(假设性索引:2 ; 值:2)项,fib(n-2)+fib(n-1)=fib(0)+fib(1)=fib(2),只要确保这里没问题后后面也就是依次推敲的事了,大概是表达这个意思吗

    2023-01-03 14:21:21
  • 好帮手慕慕子 回复 提问者 慕的地9440514 #2

    可以这么去理解,祝学习愉快~

    2023-01-03 15:04:34
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师