js递归函数学习

本文介绍了递归函数的概念,包括递归体和边界条件,并通过计算阶乘、寻找喇叭花数以及实现斐波那契数列等实例,详细阐述了递归在数据结构和算法中的应用。递归是解决复杂问题的有效工具,通过分解问题直至找到基础情况来逐步求解。
摘要由CSDN通过智能技术生成

概念

如果一个函数在内部调用这个函数自身,这个函数就是递归函数。

递归在数据结构和算法中经常用到,可以将很多复杂的数据模型拆解为简单问题进行求解。一定要掌握。

递归的要素

  • 递归体:把大问题拆解为小问题进行分析。

  • 边界条件:需要确定递归到何时结束

递归案例:

一、计算阶乘

  <script>
    // 封装一个计算阶乘的函数,接受一个需要计算阶乘的数字参数
    function factorial(n) {
      if (n > 0) {
        //递归结束的条件
        if (n === 1) return 1
        return n * factorial(n - 1)//继续往下递归,直到n的值为1时
      }
    }
    const result = factorial(3)
    console.log(result)
  </script>

二、寻找所有的喇叭花数

题目:喇叭花数是一个三位数,其每一位数字的阶乘之和恰好等于它本身,即abc=a! + b! + c!,其中abc表示一个三位数。请找出所有的喇叭花数。

思路:将计算某个数字的阶乘封装成函数。

  <script>
    //穷举法,从100到999遍历
    for (let i = 100; i <= 999; i++) {
      //将数字i转化成字符串
      const i_str = i.toString();
      //分别获取百位,十位,个位并利用+进行隐式转换成数字类型,
      const a = Number(i_str[0])
      const b = Number(i_str[1])
      const c = Number(i_str[2])
      //根据喇叭花数的条件进行判断
      if (factorial1(a) + factorial1(b) + factorial1(c) === i)
        console.log(i);

    }
    // 封装一个计算阶乘的函数,接受一个需要计算阶乘的数字参数
    function factorial1(n) {
      if (n > 0) {
        //递归结束的条件
        if (n === 1) return 1
        return n * factorial1(n - 1)//继续往下递归,直到n的值为1时
      }
    }
  </script>

三、斐波那契数列

斐波那契数列是这样一个数列:1、1、2、3、5、8、13、21、34......最早是由意大利数学家斐波那契开始研究的。它的规律是:下标为0和1的项,值为1;从下标为2的项开始,每一项等于前面两项之和。

提问:请找出斐波那契数列的前10项。

  <script>
    //递归函数:返回斐波那契数列中下标为n的那一项的值
    function fn(n) {
      //递归结束条件,下标为0和1的项,值为1
      if (n === 0 || n === 1) return 1
      // 继续往下递归,从下标为2的项开始,每一项等于前面两项之和
      return fn(n - 1) + fn(n - 2)
    }
    // 循环语句:打印斐波那契数列的前10项
    for (let i = 0; i <= 10; i++) {
      console.log(fn(i));
    }
  </script>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cirrod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值