JavaScript 挑战:使用递归创建一个平均计算函数
JavaScript challenge: Create an average-calculating function using recursion?
我在编写这段代码时遇到了麻烦。我应该创建一个函数,它可以接受数字数组或参数数组,并在不使用for
或while
循环的情况下计算平均值。它说我必须使用递归。我该怎么做?
多
亏了你们的建议,我才能自己完成它。在阅读你们发布的内容之前,我对如何进行实际平均计算感到困惑。如果此代码可以改进,请告诉!谢谢!
function mean( list, more ) {
if ( more ) {
list = [].slice.call( arguments );
} else if ( !list || list[0] === undefined ) return;
var a = list,
b = list.length;
return (function execute() {
if ( !a.length ) return 0;
return ( a.pop() / b ) + execute();
})();
}
我假设你熟悉递归。
只需使用索引参数实现一个递归函数即可跟踪您所在的位置,并将数字添加到同一变量中。然后在最后,除以数组的大小。
编辑:正如Kranklin在评论中指出的那样,使用pop你甚至不需要index参数。(在迭代之前,您需要存储数组的大小)。
在这里,
但通过查看它,您同意理解它:
http://jsfiddle.net/sparebyte/kGg9Y/1/
function calcAverage(nums, total, count) {
if(isNaN(count)) {
// First iteration: Init Params
return calcAverage(nums, 0, nums.length);
}
if(nums.length) {
// Middle itrations: Get a total
total = nums.pop() + total;
return calcAverage(nums, total, count)
} else {
// Last iteration: Find the total average
return total / count
}
};
function average(set, memo, total) {
memo || (memo = 0);
total || (total = set.length);
if (set.length === 0) return memo / total;
return average(set.slice(1, set.length), (memo + set[0]), total);
}
你这样称呼它:
average([1,2,3,4]); // 2.5
这是我想到的:
function av(nums, i, t) {
if (!Array.isArray(nums))
return av([].slice.call(arguments));
if (t === void 0){
if (nums.length === 0)
return;
return av(nums, nums.length-1, 0);
}
t += nums[i];
if (i > 0)
return av(nums, i-1, t);
return t / nums.length;
}
接受数字数组,或者如果第一个参数不是数组,则假定所有参数都是数字。(对非数字数据(如 av('a','x')
)没有错误检查。如果数组为空或未提供参数,则返回undefined
。
alert( av([1,2,3,4]) ); // 2.5
alert( av(1,2,3,4,5) ); // 3
假设Array.isArray()
(或适当的填充程序)可用。
相关文章:
- 我可以在json对象中添加一个函数吗
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- mongoose.connect undefined不是一个函数
- 监听器必须是一个函数
- 使用JS函数来使用另一个函数的语法?node.js
- 如何取消object.prototypes javascript的一个函数
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何在javascript中使用不止一个函数
- jQuery-在页面加载时执行一个函数
- jquery UI draggable:UI.children不是一个函数
- jQuery Mobile Undefined不是一个函数
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- JS异常:animate不是一个函数
- 如何将一个函数附加到一个不存在的元素上
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟