xxleyi / learning_list

聚集自己的学习笔记
10 stars 3 forks source link

FP recursion pattern #215

Open xxleyi opened 4 years ago

xxleyi commented 4 years ago

操练一下函数式编程中的递归模式:

  // recursion pattern
  const recursion = (initial, iter) =>
    iter(
      initial, 
      cur => recursion(cur, iter)
    )

  // use case: accumulate sum
  const sum = (n) =>
    recursion(
      0,
      (cur, next) =>
        n === 0
          ? cur
          : next(cur + (n--))
    )

  // use case: factorial
  const fact = (n) =>
    recursion(
      1,
      (cur, next) =>
        n === 0
          ? cur
          : next(cur * (n--)))

  // use case: fib
  const fib = (n) =>
    recursion(
      [1, 0, 0],
      (cur, next) =>
        cur[2] === n
          ? cur[1]
          : next([cur[0] + cur[1], cur[0], cur[2] + 1])
    )