递归-Javascript

本文介绍了递归的概念,通过直接和间接调用自身函数的例子展示递归原理。接着,详细讲解了递归在计算阶乘和实现斐波那契数列中的应用,同时给出了迭代解法作为对比。递归是一种强大的编程工具,可用于解决复杂问题。
摘要由CSDN通过智能技术生成

理解递归

‘要理解递归,首先要理解递归。’
——看到这句话,应该明白,递归本就是一种解决问题的方法,它从解决问题各个小部分开始,知道解决最初的大问题。常用与自身函数的调用。
例如

function fn(num){
  fn(num)
}

这样的直接调用自身的方法或函数,又例如

function fn1(num){
  fn2(num)
}
function fn2(num){
  fn1(num)
}

这种间接调用自身函数的也叫递归。

一些著名的递归算法

计算一个数的阶乘

5! => 54321 = 120

迭代阶乘

初步给他定义为(n)(n-1)(n-2)*…*1
用一个循环来写,如下

function fn(number){
  if(number<0) retrun undefined
  let total = 1
  for(let n = number;n>1;n--){
    total = total * n
  }
  return total
}
console.log(fn(5))  // 120

递归阶乘

怎么来理解呢?
5! = 54321。 不就等于 54! = 5 * 4321 吗?
一次类推:543! …
5432!..
5
432*1!
所以我们可以使用递归来计算:

function factorial(n){
  if(n === 1 || n === 0){
    return 1
  } // 1的阶乘、0的阶乘 = 1
  return n * factorial(n-1)
}
console.log(factorial(5)) //120


斐波那契数列

它是一个由0、1、1、2、3、5、8、13、21、34等数组组成的序列

  • 位置0的斐波那契数是0
  • 1和2的斐波那契数是1
  • n(此处n>2)的斐波那契数是(n-1)的斐波那契数加上(n-2)的斐波那契数

迭代求斐波那契数

function fn(n){
  if(n<1) return 0
  if(n<=2) return 1
  let left = 0
  let right = 1
  let fibn = n
  for(let i = 2;i <= n;i++){
    fibn =  left + right // f(n-1) + f(n+1)
    left = right
    right = fibn
  }
  return fibn
}

递归求斐波那契数

function fn(n){
  if(n<1) return 0
  if(n<=2) return 1
  return fn(n-1) + fn(n-2)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值