如何不使用递归与while循环实现指定JS递归函数的同等功能?
核心思路
先拆解原递归函数的计算逻辑:
- 递归过程本质是累加
1/(n*(n-1))(n从3到输入参数i),再加上初始参数val和边界值1/2 - 利用裂项公式
1/(n*(n-1)) = 1/(n-1) - 1/n,累加后所有中间项会完全抵消,最终可推导出通用计算式,完全不需要循环或者递归就能实现
最终实现代码
function compute(i, val = 0) { if (i < 2) throw new Error('wrong input'); return val + 1 - 1 / i; }
效果验证
随便代入参数测试即可确认和原递归函数结果完全一致:
- 输入
i=2, val=0:返回0 + 1 - 1/2 = 0.5,和原递归结果一致 - 输入
i=5, val=2:返回2 + 1 - 1/5 = 2.8,对应原递归计算结果为2 + 1/2 + 1/(3*2) + 1/(4*3) + 1/(5*4) = 2.8,完全匹配
内容的提问来源于stack exchange,提问作者lich
相关产品推荐
相关产品推荐

