用JS计算斐波那契数列的第n个值
注意时间复杂度
0、1、1、2、3、5…
function fibonacci(n: number):number {
if ( n <= 0) return 0
if ( n === 1) return 1
return fibonacci(n - 1) + fibonacci(n - 2)
}
缺点
function fibonacci(n: number):number {
if ( n <= 0) return 0
if ( n === 1) return 1
let n1 = 1 // 记录n - 1
let n2 = 0 // 记录n - 2
let res = 0 // 最终结果
for (let i = 2; i <= n; i++) {
res = n1 + n2
// 记录中间结果
n2 = n1
n1 = res
}
return res
}
fibonacci(0) // 0
fibonacci(1) // 1
fibonacci(2) // 1
fibonacci(8) // 21
describe('斐波那契数列',() => {
it('0 AND 1', () => {
expect(fibonacci(0)).toBe(0)
expect(fibonacci(1)).toBe(1)
})
it('正常情况', () => {
expect(fibonacci(2)).toBe(1)
expect(fibonacci(3)).toBe(2)
expect(fibonacci(8)).toBe(21)
})
it('n 小于 0', () => {
expect(fibonacci(-1)).toBe(0)
})
})