尾递归优化

尾递归:

1
function f(a){
	if(a == 1) return a

	return a + f(a-1)
}

每次递归有一个变量a在内存中
应该每次更新这个a,而不是在内存中,扩展更多的a

1, 递归转化为循环迭代

1
function f(a){
	var result =0

	while(true){
		if(a==0) break;
		result = result + a
		a = a - 1
	}
	reutrn result
}

2, 尾递归优化

1
function f(a, b=0){
	if(a==0) return b
	return f(a-1, a+b)
}

return 只返回一个纯函数,这就是尾递归优化