javascript 用迭代数组栈递归重写
javascript recursion rewriting with iterative array stack
需要一个模板来将递归 javascript 函数重写为迭代数组堆栈。希望这种方法比标准递归更快并且使用更少的内存。我使用对象引用作为参数。我的功能是 negascout,但我喜欢对更小、更优雅的工具进行逆向工程 Fibonacci_sequence。
一个更简单的例子是重写Fibonacci_sequence。
从 rosettacode 到 Fibonacci_sequence
function fibonacci(n) {
if (n < 2){
return 1;
}else{
return fibonacci(n-2) + fibonacci(n-1);
}
}
console.log(fibonacci(7));
//Returns 21
迭代方式可以是:
function iterativeFibonacci(n){
if (n < 2){
return 1;
}
var i;
var fibs = new Array();
fibs.push(0);
fibs.push(1);
for(i=0; i<=n; i++){
fibs.push(fibs[0] + fibs[1]);
fibs.shift();
}
return fibs[0];
}
document.write(iterativeFibonacci(7));
需要一个模板来将递归 javascript 函数重写为迭代数组堆栈。希望这种方法比标准递归更快并且使用更少的内存。我使用对象引用作为参数。我的功能是 negascout,但我喜欢对更小、更优雅的工具进行逆向工程 Fibonacci_sequence。
一个更简单的例子是重写Fibonacci_sequence。
从 rosettacode 到 Fibonacci_sequence
function fibonacci(n) {
if (n < 2){
return 1;
}else{
return fibonacci(n-2) + fibonacci(n-1);
}
}
console.log(fibonacci(7));
//Returns 21
迭代方式可以是:
function iterativeFibonacci(n){
if (n < 2){
return 1;
}
var i;
var fibs = new Array();
fibs.push(0);
fibs.push(1);
for(i=0; i<=n; i++){
fibs.push(fibs[0] + fibs[1]);
fibs.shift();
}
return fibs[0];
}
document.write(iterativeFibonacci(7));