我想使用Java中的map()或reduce()函数来打印Fibonacci系列。我无法在网上找到任何东西。我不太确定map()中的状况如何。
我基本上是写
fib(n){
return new Array(n-1).fill(1).map((_,i) => *This is where I am confused* ) ;
}
答案 0 :(得分:3)
使用reduce()
这样做相对容易,只需检查索引并采取相应措施即可:
function fib(n){
return new Array(n).fill(1).reduce((arr, _ ,i) => {
arr.push((i <= 1) ? i : arr[i-2] + arr[i-1])
return arr
},[]) ;
}
console.log(fib(10))
map()
并不是特别合适,因为您没有自然的方式来访问较早的状态。
答案 1 :(得分:0)
您可以使用Array.from
和两个起始值来映射该序列。
function fib(length) {
return Array.from({ length }, ((a, b) => _ => ([b, a] = [a + b, b, a])[2])(0, 1));
}
console.log(fib(10));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:0)
下面是您的问题的代码。 “ elem”是当前当前值,“ index”是当前索引,“ currentArray”是数组的实例。
fibonacci = (n)=>{
return new Array(n).fill(0).map((elem,index, currentArray)=>{
if(index === 0){
currentArray[index] = 0;
}else if(index === 1){
currentArray[index] = 1;
}else{
currentArray[index] = currentArray[index-2]+currentArray[index-1];
}
return currentArray[index];
});
}
您可以看到,对于每个步骤,我们都使用当前索引修改数组元素,然后在当前索引处返回该元素。迭代完成后,最终获得斐波那契数列的数组。
答案 3 :(得分:0)
I've tried in my concole it works fine,您可以按照此操作。希望它可以帮助您尝试从Google控制台运行它。
function Fibonacci(n) {
var f = [];
for (var c = 0; c < n; ++c) {
f.push((c < 2) ? c : f[c-1] + f[c-2]);
}
return f;
}
答案 4 :(得分:0)
我为我的学生写的一个野蛮的班轮例子:
const fiboReduce = level => new Array(Math.max(0, ++level)).fill(0).reduce((acc, val, index) => [...acc, ...((index > 1 && [acc[--index] + acc[--index]]) || [])], [0, ...((level > 1 && [1]) || [])]);
console.log(fiboReduce(20));
长版导演剪辑(对不起,我的法语):
const fiboReduceExplained = level => {
// on force le rang minimum à 1 en utilisant Math.max
// on ajoute 1 pour bien calculer jusqu'au rang souhaité
// on créé un tableau vide qui a pour longueur le rang souhaité
let array = new Array(Math.max(1, ++level));
array.fill(0); // on le blinde de 0 jusqu'au bout
let startValue = [0]; // valeur de départ
if(level > 1) startValue.push(1); // cas particulier pour fibo(0)
let fibo = array.reduce((acc, val, index) => { // reduce !
if(index > 1) { // index strictement supérieur à un, on est sorti des valeurs de départ
let next = acc[index - 1] + acc[index - 2]; // on calcule le terme suivant
acc.push(next); // et on l'ajoute au tableau
}
return acc; // on retourne le tableau pour la boucle suivante
}, startValue); // valeur de départ du reduce
return fibo; // on retourne le résultat
}
console.log(fiboReduceExplained(20));