带有Twist的Fibonacci - JavaScript

时间:2015-06-16 16:04:33

标签: javascript fibonacci

我被问到这个问题需要进行JavaScript访谈。

实施斐波那契数列以列出n个数字(n未包含)的序列,其中递归仅针对偶数发生。 例如

fib(10) -> fib(8) + fib (6)
fib(8) -> fib(6) + fib(4)
fib(6)  -> fib(4) +fib(2)
fib(4) -> fib(2)

我不知道该如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

这肯定需要更多澄清。 (面试官应该更清楚一点)。

但据我所知......

因此系列必须从某个地方开始,我假设它从fib(2)= 1开始。并且使用"代码"由访谈员提供的部分。

这可以很简单:

  • fib(2)= 1
  • fib(4)= 1
  • fib(6)= 2
  • ...

即。 fib(n)= fib_orig(n / 2)

答案 1 :(得分:0)

考虑

fib( 4) = fib( 2)           =  1 * fib(2)
fib( 6) = fib( 4) + fib( 2) =  2 * fib(2)
fib( 8) = fib( 6) + fib( 4) =  3 * fib(2)
fib(10) = fib( 8) + fib( 6) =  5 * fib(2)
fib(12) = fib(10) + fib( 8) =  8 * fib(2)
fib(14) = fib(12) + fib(10) = 13 * fib(2)
                               ^
                               this is fibonacci

在代码中我们得到了这个 - 一个很好的小递归(对所有偶数n> = 0都有效):

var i;

function fib(n) {
    switch (true) {
        case n === 0:
            return 0;
        case n === 2:
            return 1;
        default:
            return fib(n - 2) + fib(n - 4);
    }
}

function writeFib(n) {
    document.write('fib(' + n + ') = ' + fib(n) + ' * fib(2)<br>');
}

for (i = 0; i <= 20; i += 2) {
    writeFib(i);
}

如果你想要fib(10) -> fib(8) + fib(6)这样的结果,那么这样做(没有递归):

var i;

function fib(n) {
    switch (true) {
        case n === 0:
            return '0';
        case n === 2:
            return 'fib(2)';
        default:
            return 'fib(' + (n - 2) + ') + fib(' + (n - 4) + ')';
    }
}

function writeFib(n) {
    document.write('fib(' + n + ') -&gt; ' + fib(n) + '<br>');
}

for (i = 0; i <= 20; i += 2) {
    writeFib(i);
}