type-challenges:Fibonacci Sequence

31 阅读1分钟

Fibonacci Sequence

问题描述

实现一个通用的斐波那契 < T > 接受一个数字 T 并返回它的对应斐波那契数列。

序列开始: 1,1,2,3,5,8,13,21,34,55,89,144,...

举例:

type Result1 = Fibonacci<3> // 2
type Result2 = Fibonacci<8> // 21

斐波那契公式为

F(n) = F(n-1) + F(n-2)
// ============= Test Cases =============
import type { Equal, Expect } from './test-utils'type cases = [
  Expect<Equal<Fibonacci<1>, 1>>,
  Expect<Equal<Fibonacci<2>, 1>>,
  Expect<Equal<Fibonacci<3>, 2>>,
  Expect<Equal<Fibonacci<8>, 21>>
]
​
// ============= Your Code Here =============
// 答案
type Fibonacci<
  T extends number,
  CurrentIndex extends any[] = [1],
  Prev extends any[] = [],
  Current extends any[] = [1]
> = CurrentIndex['length'] extends T
  ? Current['length']
  : Fibonacci<T, [...CurrentIndex, 1], Current, [...Prev, ...Current]>
​

不看答案完全没思路,唉,废了。

看看大佬的带思路版的答案