递归
- 现在我们来写一个递归函数,这个函数的功能就是打印n~1
function print(num) {
if (num === 0) return 0;
console.log(num);
print(num - 1)
}
print(10000)
但是大概在10000的时候就会报栈溢出的错误
尾递归
- 尾递归就是在函数的结尾返回这个函数本身
function print(num) {
if (num === 0) return 0;
console.log(num);
return print(num - 1)
}
print(10000)
理论上这种情况下是不会报栈溢出的错误,但是事实上这种方式目前在谷歌、火狐、IE等一些浏览器上还是会有这种问题。这并不是JS语言的问题,而是这几个浏览器厂商不支持这种语法。
测试在Safari浏览器中不会有这种问题。
通常大部分的递归都能写成递推的方式,但是这要自己维护一个栈,这个以后再说。。