combine为什么不直接用排列组合的算法,而且视频里combine连返回值都没有,而且到底是返回数字还是数组?

来源:4-4 创建接口模块(上)

诺森德的凛冽寒风

2017-05-21

视频里没有返回值 

源代码里返回的是allresult

但是注释里写的返回值是个Number

然后combine的返回值要给count

count也应该是一个数  

你这个不是成了一个数组了吗

如果只是要长度为什么要这么复杂的逻辑

直接用排列组合的计算公式不就行了吗

完全看不懂为什么要这么写

计算注数我的思路

function combine(active,size){
		if (size > active) {return}
		let factorial = Calculate.factorial
		return factorial(active)/(factorial(size)*(factorial(active-size)))
}
// 阶乘
function factorial(total){
		if (total) {
			var result = total;
			if (total-1) {
				result = total*factorial(total-1)
			}else{
				return total
			}
			return result
		}else{
			return 0
		}
}

希望老师能指点解惑

写回答

1回答

快乐动起来呀

2017-05-21

哈,非常抱歉哈,注释写的不严谨,最后的返回值是一个数组,数组的长度就是注数,所以注释就简写了注数,//szimg.mukewang.com/5921ac750001a7ca12680460.jpg

看下这个运行结果C4,3的结果是4,因为Js中没有排列组合的运算,只能用递归来实现。同学这个思路是很正确的,但是有没有考虑过性能呢?可以和视频中的排列组合算法对比下

1
3
快乐动起来呀
回复
诺森德的凛冽寒风
最简单的就是看下运行时间,比比那个速度快,再复杂点就是看看浏览器的运行内存,本身一个递归就很耗性能,如果多个递归复杂度要翻倍的哈
2017-05-21
共3条回复

ES6零基础教学 解析彩票项目

ES6从零开始,量身设计的迷你案例,让你全面掌握ES6

2579 学习 · 881 问题

查看课程