如何编写生成小于给定数字 (javascript) 的斐波那契数列的函数?
How to write a function generating Fibonacci series smaller than a given number (javascript)?
这是我的代码:
function fibs(num) {
//generate Fibonacci numbers:
let arr = [1,1]
let i = 2;
function fibsRange(i) {
arr[i] = arr[i-1] + arr[i-2]
if (arr[i] < num) {
fibsRange(i+1);//call function one more time;
}
return arr
}
return fibsRange();
}
console.log(fibs(5));
假设给定的数字 (num) 大于 2。我哪里错了?
注意:我编辑了我的代码。
function fibs(num) {
//generate Fibonacci numbers:
let arr = [1, 1];
while(arr[arr.length-1] <= num){
let y = arr[arr.length-1] + arr[arr.length-2];
if(y > num){
break; // break if new y is greater than num
}
arr.push(y); // add y to the serie
}
return arr; //// return the serie
}
console.log(fibs(50));
首先:正如 Phil 所提到的,您的函数(第一个)需要 return 一些东西。
第二:你不需要 2 个功能,一个就可以完成这项工作。
这是您的代码的工作版本(我还修改了一些不必要的代码。
编辑:当您只需要解析一个参数时,我添加了这种情况
function fibsRange(i,arr,num) {
if(arr[i-1]+arr[i-2] > num) return arr
else{
arr[i] = arr[i - 1] + arr[i - 2]
return fibsRange(i + 1,arr,num);
}
}
//in case you need just one parameter
function fib(num){
let arr = [1, 1];
let i = 2;
return fibsRange(i,arr,num);
}
//those(declaration of arr and i) are unnecessary in case you use fib
let arr = [1, 1]
let i = 2;
console.log(fibsRange(i,arr,5));
console.log(fib(5));
您从未调用过 fibsRange()
函数,也从未从 fibs()
返回任何内容。
以下版本有效。
function fibs(num) {
//generate Fibonacci numbers:
let arr = [1, 1]
if (num>1) fibsRange(2);
function fibsRange(i) {
arr[i] = arr[i - 1] + arr[i - 2]
if (arr[i] < num) {
fibsRange(i + 1); //call function one more time;
}
}
return arr;
}
console.log(fibs(5)); //undified;
您的代码正在检查 arr[i] < num
,然后调用 fibsRange(i+1)
。这是一个错误的逻辑,你总是会得到比 num
更高的斐波那契数,因为你已经将它设置为 arr[i]
然后检查条件。但是,您应该先检查是否 arr[i] < num
,然后将其推入 arr
.
function fibs(num) {
//generate Fibonacci numbers:
let arr = [1, 1];
let i = 2;
function fibsRange(i) {
const lastFibNumber = arr[i - 1] + arr[i - 2];
if (lastFibNumber < num) {
arr.push(lastFibNumber);
fibsRange(i + 1); //call function one more time;
}
return arr;
}
return fibsRange(i);
}
console.log(fibs(5));
这是我的代码:
function fibs(num) {
//generate Fibonacci numbers:
let arr = [1,1]
let i = 2;
function fibsRange(i) {
arr[i] = arr[i-1] + arr[i-2]
if (arr[i] < num) {
fibsRange(i+1);//call function one more time;
}
return arr
}
return fibsRange();
}
console.log(fibs(5));
假设给定的数字 (num) 大于 2。我哪里错了?
注意:我编辑了我的代码。
function fibs(num) {
//generate Fibonacci numbers:
let arr = [1, 1];
while(arr[arr.length-1] <= num){
let y = arr[arr.length-1] + arr[arr.length-2];
if(y > num){
break; // break if new y is greater than num
}
arr.push(y); // add y to the serie
}
return arr; //// return the serie
}
console.log(fibs(50));
首先:正如 Phil 所提到的,您的函数(第一个)需要 return 一些东西。 第二:你不需要 2 个功能,一个就可以完成这项工作。 这是您的代码的工作版本(我还修改了一些不必要的代码。
编辑:当您只需要解析一个参数时,我添加了这种情况
function fibsRange(i,arr,num) {
if(arr[i-1]+arr[i-2] > num) return arr
else{
arr[i] = arr[i - 1] + arr[i - 2]
return fibsRange(i + 1,arr,num);
}
}
//in case you need just one parameter
function fib(num){
let arr = [1, 1];
let i = 2;
return fibsRange(i,arr,num);
}
//those(declaration of arr and i) are unnecessary in case you use fib
let arr = [1, 1]
let i = 2;
console.log(fibsRange(i,arr,5));
console.log(fib(5));
您从未调用过 fibsRange()
函数,也从未从 fibs()
返回任何内容。
以下版本有效。
function fibs(num) {
//generate Fibonacci numbers:
let arr = [1, 1]
if (num>1) fibsRange(2);
function fibsRange(i) {
arr[i] = arr[i - 1] + arr[i - 2]
if (arr[i] < num) {
fibsRange(i + 1); //call function one more time;
}
}
return arr;
}
console.log(fibs(5)); //undified;
您的代码正在检查 arr[i] < num
,然后调用 fibsRange(i+1)
。这是一个错误的逻辑,你总是会得到比 num
更高的斐波那契数,因为你已经将它设置为 arr[i]
然后检查条件。但是,您应该先检查是否 arr[i] < num
,然后将其推入 arr
.
function fibs(num) {
//generate Fibonacci numbers:
let arr = [1, 1];
let i = 2;
function fibsRange(i) {
const lastFibNumber = arr[i - 1] + arr[i - 2];
if (lastFibNumber < num) {
arr.push(lastFibNumber);
fibsRange(i + 1); //call function one more time;
}
return arr;
}
return fibsRange(i);
}
console.log(fibs(5));