js 递归实现 1*2+2*3+…+(n-1)*n

需求:给定递归函数 function reference(n){} ,实现 1*2+2*3+...+(n-1)*n

思路:以上需求,其需要重复解决的部分为 (n-1)*n ,而在得到该乘积值之后,需要考虑的是,如何将该值传递到下一个函数中。在不借助外部变量的情况下,此处考虑使用函数的内置 arguments 对象。

代码如下

    // 实现 n*(n-1) +...+ 4*3 + 3*2 + 2*1
    function reference(n) {
        return n <= 1 ? (arguments[1] || 0) : reference(n - 1, (arguments[1] || 0) + n * (n - 1))
    }

    reference(0); // 0
    reference(1); // 0
    reference(2); // 2
    reference(3); // 8
    reference(4); // 20
    reference(5); // 40

小结:如果函数调用时,参数 n>1 ,则进行乘积计算 (n-1)*n ,而下次函数调用的参数便为 n-1 ,因需要对后续的乘积值做累加,则需要将函数的第二个参数作为本次乘积结果的载体,供下一次调用获取,而本次,也需要累加之前的乘积结果,同理,即为 arguments[1] ;如果 n<=1 ,则将参数 arguments[1] 即第二个参数(乘积累加值)反馈出来,若不存在,按 0 处理。

仅供来日回顾参考。


版权声明:本文为qq_46331926原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>