斐波那契数列尾调用测试

普通写法(非尾调用):

1
2
3
4
5
6
7
function fibonacci(n) {
if (n <= 2) {
return 1;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}

尾调用写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function fibonacci(n) {
n = n || 1; //undefined、null、false、0、NaN、””(空字符串)
n = isNaN(n) ? 1 : n; //非数值类型
n = n < 0 ? 1 : n; //负数
//n = parseInt(n); //取整
n = ~~n; //使用否运算取整
var a = 1,
b = 1;
if (arguments.length == 3) {
a = arguments[1];
b = arguments[2];
}
if (n <= 2) {
return b;
} else {
return fibonacci(n - 1, b, a + b);
}
}