Skip to content

斐波拉契数列II

斐波那契数列示例:

1,1,2,3,5,8,13,21,34 。。。。

求指定的“斐波拉契数”在数列中的位置

比如输入8得到该值在数列中的位置6,不存在则返回-1

迭代

js
/**
 * 求指定斐波拉契数对应的位置
 * @param {number} num 
 * @returns {number}
 */
function getFibIndex(num) {
    if (num === 1) {
        return 1
    }
    let a = 1, b = 1, c = 0
    let index = 2
    while (c < num) {
        index++
        c = a + b
        a = b
        b = c
        if (c === num) {
            return index
        }
    }
    return -1
}

递归

类似迭代的处理思路,将计算过程作为参数传入

js
/**
 * 求指定斐波拉契数对应的位置
 * @param {number} num 
 * @returns {number}
 */
function getFibIndex(num, a = 1, b = 1, index = 2) {
    if (num === 1) {
        return 1
    }
    if (a + b > num) {
        return -1
    }
    if (a + b === num) {
        return ++index
    }
    return getFibIndex(num, b, a + b, ++index)
}