递归原理及常见面试题

递归是一种通过调用自身来解决问题的编程方法,递归的优点是它可以将复杂问题分解为更简单的子问题,从而提供一种清晰简洁的解决方法。然而,递归的效率可能较低,并且可能占用大量的内存,因为它会在每个递归调用中存储临时状态,满足条件时返回,要避免递归进入无限循环,导致栈溢出错误。

1.阶乘:一个正整数的各个数字相乘所得的积

const factorial = (n) => {
  if (n === 0) {
    return 1;
  } else {
    return n * factorial(n - 1);
  }
}

console.log(factorial(5)); // 输出:120

2.斐波那契数列:是一个数列,其中每个数都是前两个数之和,一般情况下,前两个数两个数是0和1

fibonacci 函数以一个正整数作为参数 n,并返回斐波那契数列的第 n 个元素。基于递归的思想,当 n 为0或1时,直接返回对应的数字。否则,递归地计算前两个数字之和,并返回结果。

const fibonacci = (n) => {
  if (n === 0) {
    return 0;
  } else if (n === 1) {
    return 1;
  } else {
    return fibonacci(n - 1) + fibonacci(n - 2);
    // 7+6
  }
}

console.log(fibonacci(7)); // 输出:13

3.数组求和

const fn = (list) => {
  if (list.length === 0) {
    return 0
  } else {
    return list[0] + fn(list.slice(1))
  }
}
console.log(fn([1, 2, 4, 5]));//12

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值