第N项斐波那契数递归实现中else块运行逻辑请教
代码逻辑解释
这是带记忆化优化的递归版斐波那契数求解代码,哈希表的作用是存储已经计算过的项的结果,避免普通递归的重复计算问题。
else块运行逻辑
else块的触发前提是:你要计算的第n项斐波那契数还没有被存入哈希表,没有现成结果可以直接返回。
块内的逻辑分两步走:
- 第一步:按照斐波那契数的定义,把第
n项的计算拆解为「计算第n-1项的值」+「计算第n-2项的值」。两个子计算会复用同一个哈希表,走和当前调用完全相同的判断逻辑:如果子项已经在哈希表里就直接返回值,没在的话就继续进对应的else块拆解计算。 - 第二步:把计算得到的第
n项结果存入哈希表,后续所有调用需要用到第n项的结果时都可以直接读取不需要重复递归,最后返回当前计算出的第n项值。
实际运行示例
我们以调用getNthFib(4)为例,走一遍完整流程:
- 初始哈希表为
{1: 0, 2: 1},n=4不在哈希表中,进入else块 - 先计算
getNthFib(3, 哈希表):- n=3不在初始哈希表中,进入对应else块
- 计算
getNthFib(2, 哈希表):n=2在哈希表中,直接返回1 - 计算
getNthFib(1, 哈希表):n=1在哈希表中,直接返回0 - 计算得到n=3的结果为1+0=1,存入哈希表,此时哈希表变为
{1: 0, 2: 1, 3: 1},返回1
- 再计算
getNthFib(2, 哈希表):n=2已经在哈希表中,直接返回1 - 计算得到n=4的结果为1+1=2,存入哈希表,返回2
内容的提问来源于stack exchange,提问作者dev
相关产品推荐
相关产品推荐

