javascript - 如何从斐波那契数中提取所有值到n?
问题描述
我需要在不使用数组的情况下使用递归编写函数。这会将斐波那契数字的所有值返回到n
. n > 0
;
function fib(number) {
if (number === 1) {
return "0,1,1";
}
if (number === 2) {
return "0,1,1,2,";
} else {
let fibList = fib(number - 1);
return (fibList += `${number - 2 + number - 1},`);
}
}
console.log(fib(45));
我的代码不能按我的意愿工作,我不知道如何修复它。
n=7 “0, 1, 1, 2, 3, 5 “
n=45 “0, 1, 1, 2, 3, 5, 8, 13, 21, 34”
解决方案
有点有趣的问题。它有助于使用一些数学理论。可以证明一个数字 ,n
是一个斐波那契数当且仅当其中一个5*n**2 + 4
或5*n**2 - 4
是一个完美的正方形(见此证明)。使用这种特性,很容易直接编写一个递归函数。这是一个 Python 示例,您应该能够将其移植到 JavaScript:
import math
def perfect_square(n):
return int(math.sqrt(n)) ** 2 == n
def is_fib(n):
return perfect_square(5*n**2 + 4) or perfect_square(5*n**2-4)
def fibs_below(n):
if n == 1:
return "0 1 1"
elif is_fib(n):
return fibs_below(n-1) + ' ' + str(n)
else:
return fibs_below(n-1)
例如:
>>> fibs_below(45)
'0 1 1 2 3 5 8 13 21 34'
推荐阅读
- splunk - Splunk 主机标头覆盖日志消息中的主机密钥
- sql - 如何将数据更改为 * 但只有单词的 50%
- php - laravel 返回数组到字符串的转换错误
- gatsby - i18n 出错(错误:您正在传递一个未定义的模块!请检查您传递给 i18next.use() 的对象)
- java - 为什么同步锁不适用于字符串连接的原因
- c++ - Makefile 不对文件使用隐式规则
- windows - appcmd.exe set config 不检查用户名或密码是否无效并设置它
- batch-file - 防止批处理修饰符在文件名中删除插入符号
- javascript - 如何导出作为 JavaScript (React) 函数中的参数的对象?
- javascript - 如何从 Javascript 中的 SQLite 数据库中获取表数据?