functionfibonacci(n) { let one = 1; let two = 1; let three = 0 for (let i = 3; i <= n; i++) { //此处代码重点部分,用three累加前两个数的和,也是斐波那契数列的精髓所在。 three = one + two; one = two; two = three;
} if (n === 1 || n === 2) { //判断n==1或2的情况下返回undefined return one; } return three; //最后返回three }
console.log('start 1') console.time("fibo") for (let i = 0; i < 1000000; i++) { fibonacci(50) } console.timeEnd("fibo")
console.log('start 2') console.time("fibo2") for (let i = 0; i < 100; i++) { fibonacci2(30) } console.timeEnd("fibo2") console.log('11', fibonacci(30)) console.log('22', fibonacci2(30))
nodejs运行结果:
1 2 3 4 5 6 7
test begin start 1 fibo: 57.954ms start 2 fibo2: 833.642ms 11 832040 22 832040
go and c
版本
1 2 3 4 5 6 7 8 9
go version go version go1.13.1 windows/amd64
gcc --version gcc (tdm64-1) 5.1.0 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
funcfibo(n int)int { one := 1 two := 1 three := 0 for i := 3; i <= n; i++ { three = one + two one = two two = three } if n == 1 || n == 2 { return one } return three }
funcfibo2(n int)int { if n == 1 || n == 2 { return1 } return fibo2(n-1) + fibo2(n-2) }
namespace testdot { class Fibo { public static int fibo(int n) { var one = 1; var two = 1; var three = 0; for (var i = 3; i <= n; i++) { three = one + two; one = two; two = three; } if (n == 1 || n == 2) { return one; } return three; } public static int fibo2(int n) { if (n == 1 || n == 2) { return 1; } return fibo2(n - 1) + fibo2(n - 2); } } class Program { static void Main(string[] args) { Console.WriteLine("start 1"); var t = DateTime.Now; for (var i = 0; i < 1000000; i++) { Fibo.fibo(50); } Console.WriteLine("fibo {0}", (DateTime.Now - t).Milliseconds); Console.WriteLine("start 2"); t = DateTime.Now; for (var i = 0; i < 100; i++) { Fibo.fibo2(30); } Console.WriteLine("fibo2 {0}", (DateTime.Now - t).Milliseconds); Console.WriteLine("11 {0}", Fibo.fibo(30)); Console.WriteLine("22 {0}", Fibo.fibo2(30)); }