我被问到这个问题需要进行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)
我不知道该如何解决这个问题。
答案 0 :(得分:0)
这肯定需要更多澄清。 (面试官应该更清楚一点)。
但据我所知......
因此系列必须从某个地方开始,我假设它从fib(2)= 1开始。并且使用"代码"由访谈员提供的部分。
这可以很简单:
即。 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 + ') -> ' + fib(n) + '<br>');
}
for (i = 0; i <= 20; i += 2) {
writeFib(i);
}