尾递归实现阶乘/查询斐波那契数列/翻转正整数

83 阅读1分钟

1.使用尾递归实现阶乘
思路: 阶乘让我想到数组的reduce方法,所以我的思路是设置两个形参,分别代表累计值和乘数,递归每层让乘积乘以乘数,最后一层返回结果

const fn = (n, a = 1) => {
      // 当n为1时,计算完毕,返回结果
      if(n === 1) return a
      // 当n不为1时,计算并递归
      return fn(n-1, a * n)
}
console.log(fn(5))

2.使用尾递归查询斐波那契数列的第n项
思路:要求第n项,必须从第一层开始增加,已知要求第n项,所以需要设置形参n来控制层数,同时需要设置形参x/y来分别代表前一个值和前两个值

const fn = (n, x=0, y=1) => {
    // 
    if(n === 1) return x + y 
    return fn(n-1, y , x + y)
    }
console.log(fn(5))

3.使用尾递归倒叙输出正整数 思路: 传入一个正整数,另一个形参代表翻转结果,因为n % 10可以得到个位的值,所以我只需要每次都让n去掉个位,并将去掉的数加到a的后面即可

const fn = (n, a='') => {
    if(n === 0) return a
    return fn(Math.trunc(n / 10), a + n % 10)
}
console.log(fn(12345))