function fs(n){
if(n ===1 || n ===2){
return 1;
}
return fs(n - 1) + fs(n - 2)
}
console.log(fs(6)) //输出结果为8
递归函数是一直执行到符合设定的条件时才会停止,这里设定了当n等于1或2的时候就会返回一个1,函数是先计算完前面的值才会计算后面的值。
①:fs(6) = fs(5)+fs(4), 后面的fs(4)先不执行,先执行前面的fs(5)
②:fs(5) = fs(4)+fs(3), 后面的fs(3)先不执行,先执行前面的fs(4)
③:fs(4)= fs(3)+fs(2), 后面的fs(2)先不执行,先执行前面的fs(3)
④:fs(3) = fs(2)+fs(1), 后面的fs(1)先不执行,先执行前面的fs(2)
函数fs(2) 运行时符合判断语句 , 返回 ‘1’。
到此前面的fs函数已经计算完了,开始计算后面的fs函数
执行序号④后面的fs(1)函数,符合判断语句,返回 ‘1’
接着执行序号③后面的fs(2)函数,符合判断语句,返回 ‘1’
执行序号②后面的fs(3)函数,不符合判断语句,继续向下执行
⑤:fs(3) = fs(2) + fs(1), 后面的fs(1)先不执行,先执行前面的fs(2)
fs(2)函数符合判断语句条件,返回 ‘1’
执行序号⑤后面的fs(1),符合判断条件,返回 ’1‘
接着执行序号①后面的fs(4)函数
⑥:fs(4) = fs(3) + fs(2) 同上
⑦:fs(3) = fs(2) + fs(1)
运行fs(2) 符合判断语句,返回 ’1‘
执行序号⑦后面的fs(1)函数,符合条件,返回 ‘1’
最后是序号⑥后面的fs(2)函数,符合条件,返回 ‘1’。整个函数运行完毕
把所有返回的1加起来就等于输出结果8了
fs(6) = fs(5) + fs(4)
fs(5) = fs(4) + fs(3)
fs(4) = fs(3) + fs(2)
fs(3) = fs(2) + fs(1)
fs(2) return 1;
fs(1) return 1;
fs(2) return 1;
fs(3) = fs(2) + fs(1)
fs(2) return 1
fs(1) return 1
fs(4) = fs(3) + fs(2)
fs(3) = fs(2) + fs(1)
fs(2) return 1
fs(1) return 1
fs(2) return 1