如何使用复杂度为 O(n) 的 Javascript 找到第 n 个斐波那契数

爱伦普苏姆

真的很努力想弄清楚如何解决这个问题。问题是使用 javascript 找到具有 O(n) 复杂度的第 n 个斐波那契数。

我发现了很多很棒的文章如何使用 C++ 或 Python 解决这个问题,但是每次我尝试实现相同的逻辑时,我最终都会在Maximum call stack size exceeded.

Python 中的示例代码

MAX = 1000

# Create an array for memoization
f = [0] * MAX

# Returns n'th fuibonacci number using table f[]
def fib(n) :
        # Base cases
        if (n == 0) :
                return 0
        if (n == 1 or n == 2) :
                f[n] = 1
                return (f[n])

        # If fib(n) is already computed
        if (f[n]) :
                return f[n]

        if( n & 1) :
                k = (n + 1) // 2
        else : 
                k = n // 2

        # Applyting above formula [Note value n&1 is 1
        # if n is odd, else 0.
        if((n & 1) ) :
                f[n] = (fib(k) * fib(k) + fib(k-1) * fib(k-1))
        else :
                f[n] = (2*fib(k-1) + fib(k))*fib(k)

        return f[n]


// # Driver code
// n = 9
// print(fib(n))

然后尝试将其移植到 Javascript

const MAX = 1000;
let f = Array(MAX).fill(0);
let k;

const fib = (n) => {

    if (n == 0) {
        return 0;
    }

    if (n == 1 || n == 2) {
        f[n] = 1;

        return f[n]
    }

    if (f[n]) {
        return f[n]
    }

    if (n & 1) {
        k = Math.floor(((n + 1) / 2))
    } else {
        k = Math.floor(n / 2)
    }

    if ((n & 1)) {
        f[n] = (fib(k) * fib(k) + fib(k-1) * fib(k-1))
    } else {
        f[n] = (2*fib(k-1) + fib(k))*fib(k)
    }

    return f[n]
}

console.log(fib(9))

那显然行不通。在 Javascript 中,这最终会陷入无限循环。那么你将如何使用 Javascript 解决这个问题?

提前致谢

工程师

问题与k变量的作用域有关它必须在函数内部:

const fib = (n) => {
    let k;

你可以在这里找到更多好的实现列表

演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在O(logn)时间和空间复杂度中找到第N个斐波那契数?

来自分类Dev

使用动态规划获得第n个斐波那契数

来自分类Dev

使用2D数组的第N个斐波那契数

来自分类Dev

使用动态规划获得第n个斐波那契数

来自分类Dev

使用递归程序的 NASM 中的第 n 个斐波那契数 - [组装]

来自分类Dev

如何估计第n个元素的斐波那契递归算法的时间?

来自分类Dev

使用C中的黄金比率计算第n个斐波那契数模m

来自分类Dev

n的第N个斐波那契数等于10 ^ 19?

来自分类Dev

找到斐波那契的第n个术语我一直出错

来自分类Dev

我想使用大整数值确定序列中的第n个斐波那契项

来自分类Dev

如何在Scheme中找到斐波那契数?

来自分类Dev

如何创建一个斐波那契数最大为整数n的数组?

来自分类Dev

使用递归的JavaScript斐波那契

来自分类Dev

使用 python 获取斐波那契数列的第 n 个字符

来自分类Dev

获取 G 系列的第 n 个值(一般斐波那契数列)

来自分类Dev

打印斐波那契数列直到第n位?

来自分类Dev

如何在JAVA中达到第92个斐波那契数字?

来自分类Dev

使用指针返回一个包含前 n 个斐波那契数列的数组

来自分类Dev

如何返回前N个斐波那契数字流?

来自分类Dev

如何找到大量的斐波那契总和?

来自分类Dev

尝试使用递归来解决斐波那契(javascript)

来自分类Dev

使用斐波那契递归打印1到n

来自分类Dev

斐波那契数为负

来自分类Dev

在第i个索引上找到元素而不进行排序并且复杂度为O(n)

来自分类Dev

递归找到斐波那契数的总和

来自分类Dev

斐波那契数列-时间复杂度

来自分类Dev

斐波那契数列-时间复杂度

来自分类Dev

使用无限流生成前10个斐波那契数

来自分类Dev

使用无限流生成前10个斐波那契数

Related 相关文章

  1. 1

    在O(logn)时间和空间复杂度中找到第N个斐波那契数?

  2. 2

    使用动态规划获得第n个斐波那契数

  3. 3

    使用2D数组的第N个斐波那契数

  4. 4

    使用动态规划获得第n个斐波那契数

  5. 5

    使用递归程序的 NASM 中的第 n 个斐波那契数 - [组装]

  6. 6

    如何估计第n个元素的斐波那契递归算法的时间?

  7. 7

    使用C中的黄金比率计算第n个斐波那契数模m

  8. 8

    n的第N个斐波那契数等于10 ^ 19?

  9. 9

    找到斐波那契的第n个术语我一直出错

  10. 10

    我想使用大整数值确定序列中的第n个斐波那契项

  11. 11

    如何在Scheme中找到斐波那契数?

  12. 12

    如何创建一个斐波那契数最大为整数n的数组?

  13. 13

    使用递归的JavaScript斐波那契

  14. 14

    使用 python 获取斐波那契数列的第 n 个字符

  15. 15

    获取 G 系列的第 n 个值(一般斐波那契数列)

  16. 16

    打印斐波那契数列直到第n位?

  17. 17

    如何在JAVA中达到第92个斐波那契数字?

  18. 18

    使用指针返回一个包含前 n 个斐波那契数列的数组

  19. 19

    如何返回前N个斐波那契数字流?

  20. 20

    如何找到大量的斐波那契总和?

  21. 21

    尝试使用递归来解决斐波那契(javascript)

  22. 22

    使用斐波那契递归打印1到n

  23. 23

    斐波那契数为负

  24. 24

    在第i个索引上找到元素而不进行排序并且复杂度为O(n)

  25. 25

    递归找到斐波那契数的总和

  26. 26

    斐波那契数列-时间复杂度

  27. 27

    斐波那契数列-时间复杂度

  28. 28

    使用无限流生成前10个斐波那契数

  29. 29

    使用无限流生成前10个斐波那契数

热门标签

归档