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