249递归:概念,利用递归求1~n的阶乘,利用递归求斐波那契数列,利用递归遍历数据(代码片段)

jianjie jianjie     2023-04-24     468

关键词:

6.1什么是递归

递归:如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。

简单理解: 函数内部自己调用自己, 这个函数就是递归函数

注意:递归函数的作用和循环效果一样,由于递归很容易发生“栈溢出”错误(stack overflow),所以必须要加退出条件return。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        // 递归函数 : 函数内部自己调用自己, 这个函数就是递归函数
        var num = 1;

        function fn() 
            console.log('我要打印6句话');
            if (num == 6) 
                return; // 递归里面必须加退出条件
            
            num++;
            fn();
        
        fn();
    </script>
</body>

</html>

6.2 利用递归求1~n的阶乘

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        // 利用递归函数求1~n的阶乘 1 * 2 * 3 * 4 * ..n
        function fn(n) 
            if (n == 1) 
                return 1;
            
            // (1)fn(n - 1):就是 (n-1) 的阶乘; (2)n * fn(n - 1):就是 n 乘以 (n-1)的阶乘,也就是 n 的阶乘。
            return n * fn(n - 1);
        
        console.log(fn(3));
        console.log(fn(4));
        // 详细思路 假如用户输入的是3
        //return  3 * fn(2)
        //return  3 * (2 * fn(1))
        //return  3 * (2 * 1)
        //return  3 * (2)
        //return  6
    </script>
</body>

</html>

技术图片


6.3 利用递归求斐波那契数列

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        // 利用递归函数求斐波那契数列(兔子序列)  1、1、2、3、5、8、13、21...
        // 用户输入一个数字 n 就可以求出 这个数字对应的兔子序列值
        // 我们只需要知道用户输入的n 的前面两项(n-1 n-2)就可以计算出n 对应的序列值
        function fb(n) 
            if (n === 1 || n === 2) 
                return 1;
            
            return fb(n - 1) + fb(n - 2);
        
        console.log(fb(3));
        console.log(fb(6));
    </script>
</body>

</html>

6.4 利用递归遍历数据

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        var data = [
            id: 1,
            name: '家电',
            goods: [
                id: 11,
                gname: '冰箱',
                goods: [
                    id: 111,
                    gname: '海尔'
                , 
                    id: 112,
                    gname: '美的'
                , ]
            , 
                id: 12,
                gname: '洗衣机'
            ]
        , 
            id: 2,
            name: '服饰'
        ];

        // 我们想要做输入id号,就可以返回的数据对象
        // 1. 利用 forEach 去遍历里面的每一个对象
        function getID(json, id) 
            var o = ; // 这个o 必须是外层函数的,因为调用的是外层函数。

            json.forEach(function(item) 
                // console.log(item); // 2个数组元素
                if (item.id == id) 
                    // console.log(item);
                    o = item;
                    return o;
                    // 2. 我们想要得里层的数据 11 12 可以利用递归函数
                    // 里面应该有goods这个数组并且数组的长度不为 0 
                 else if (item.goods && item.goods.length > 0) 
                    o = getID(item.goods, id);
                    // return o;  // 在这里return o 也一样,不用到最后return。或者内部函授都不返回,直接让外层函数返回也可。
                
            );
            return o;
        

        console.log(getID(data, 1)); // id: 1, name: "家电", goods: Array(2)
        console.log(getID(data, 2)); // id: 2, name: "服饰"
        console.log(getID(data, 11)); // id: 11, gname: "冰箱", goods: Array(2)
        console.log(getID(data, 12)); // id: 12, gname: "洗衣机"
        console.log(getID(data, 111)); // id: 111, gname: "海尔"
    </script>
</body>

</html>

2717:递归函数求n的阶乘

2717:递归函数求n的阶乘TimeLimit:1Sec  MemoryLimit:128MBSubmit:1329  Solved:942[Submit][Status][WebBoard]Description输入一个正整数n,利用递归函数求n的阶乘。递归函数声明如下:int fac(intn); //求n!的递归函数声明Input一 查看详情

递归函数(代码片段)

...法,又可以调用自己,当这个方法调用自己的时候,就是递归方法或者递归函数递归两个特点:1.递归方法一直会调用自己,直到某些条件满足时停止,也就是说一定要有出口;2.递归方法会有一些参数,而他会把这些新的参数... 查看详情

02-方法——课程作业01-递归练习

...数(1)使用组合数公式利用n!来计算程序设计思想:利用递归定义一个方法jiecheng(intn)用来求一个数n的阶乘,当n>1时,返回n*jiecheng(n-1),直到n=1时,返回1。输入底数m和阶数n之后,利用该函数分别求出m和n还有m-n的阶乘,利用公... 查看详情

递归--求n!的阶乘结果(代码片段)

递归的基本概念?一个函数调用其自身,就是递归?求n!的递归函数通过函数递归的方式实现求函数的阶乘。Python代码如下:#求阶乘defFactorial(n):if(n==1):return1else:returnn*Factorial(n-1)defmain():n=int(input("请输入需要计算的阶乘数值:"))rtn=Fa... 查看详情

java50道经典习题-程序22递归求阶乘(代码片段)

题目:利用递归方法求5!。分析:递归公式:n*factorial(n-1);1publicclassProg222publicstaticvoidmain(String[]args)3System.out.println(factorial(5));45//递归求阶乘6publicstaticlongfactorial(intn)7if(n==0||n==1)8return1L;910 查看详情

递归求阶乘和(代码片段)

6-2递归求阶乘和(10分)本题要求实现一个计算非负整数阶乘的简单函数,并利用该函数求1!+2!+3!+...+n!的值。函数接口定义:doublefact(intn);doublefactsum(intn);函数fact应返回n的阶乘,建议用递归实现。函数factsum应返回1!+2!+...+n!的值。... 查看详情

java基础50道经典练习题(22)——递归求阶乘

【程序22递归求阶乘】题目:利用递归方法求5!。 程序分析:递归公式:fn=fn_1*4! 源码:packagecom.homework.test;/*【程序22递归求阶乘】题目:利用递归方法求5!。程序分析:递归公式:fn=fn_1*4!*/publicclassTest22{publicstaticvoidmain(Str... 查看详情

java基础50道经典练习题(22)——递归求阶乘

【程序22递归求阶乘】题目:利用递归方法求5!。 程序分析:递归公式:fn=fn_1*4! 源码:packagecom.homework.test;/*【程序22递归求阶乘】题目:利用递归方法求5!。程序分析:递归公式:fn=fn_1*4!*/publicclassTest22{publicstaticvoidmain(Str... 查看详情

课后作业1

...学公式将原式化为几个求阶乘的式子之间的运算,再利用递归算法求阶乘,因为1的阶乘是1,所以递归算法的结束条件就是当n等于1时,n的阶乘等于一,然后再依次计算,如此可求出n的阶乘。进而可求原式。 程序流程图:&nb... 查看详情

python进阶练习之——递归求阶乘(代码片段)

题目利用递归方法求5!。程序分析递归调用即可。deffactorial(n):returnn*factorial(n-1)ifn>1else1print(factorial(5))小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶有什么不明白的欢迎私信或留言,得到细致讲解。另外想要... 查看详情

java例题_22用递归求阶乘5!

1/*22【程序22递归求阶乘】2题目:利用递归方法求5!。3程序分析:递归公式:fn!=fn*4!4*/56/*分析7*递归:如果其中每一步都要用到前一步或前几步的结果,称为递归的8*根据提示,可以用算法x!=x*(x-1)!;y=x-1,y!=y*(y-1)!;...9*10**/111213package... 查看详情

利用递归函数求斐波那契值python版

参考技术A首先我们要了解一下什么是递归。递归法,递归法就是利用上一个或者上几个状态来求取当前状态的值(个人看法)。也可以说成函数自己调用自己的一种解决问题的策略。因此递归法通常是依托函数来实现的,递归... 查看详情

第3章递归(代码片段)

1.1递归递归,指在当前方法内调用自己的这种现象publicvoidmethod()System.out.println(“递归的演示”);//在当前方法内调用自己method();1.2递归练习1.2.1递归求5的阶乘利用递归求出5!的结果1.2.1.1案例代码十一:packagecom.itheima_01;/**需求:求5... 查看详情

递归--利用递归方法求6!(代码片段)

利用递归方法求6!使用递归时,关键问题是弄明白递归表达式的含义以及递归的终止条件1packagecom.test01;23publicclassJianDa034publicstaticlongfac(inti)5if(i==1)6return1;7else8returni*fac(i-1);91011publicstaticvoidmain(String[]args)12long 查看详情

c写的递归求阶乘

代码如下:intfunc(intn) if(n==1) return1; else returnn*func(n-1); 查看详情

js函数递归

一、知识说明functionfun(){//自己调用自己,称为递归调用fun();console.log("m2");}fun();二、函数+变量//用递归来求5的阶乘//n!=n*(n-1)!//定义一个函数,用于求n的阶乘functionfunc(n){if(n==1){return1;}//func(n-1)因为传递的参数是n-1,那么就是求(n-1)... 查看详情

算法入门-递归(代码片段)

 一个函数调用其自身就是递归递归和普通函数调用一样都是利用栈来实现的 例题1求阶乘#include<iostream>usingnamespacestd;intFactorial(intn) if(n==0) return1; else returnn*Factorial(n-1); intmain() cout<<Factorial(5) 查看详情

递归方法的应用

...公式计算(计算阶乘用循环)②利用递推方法计算③利用递归方法计算2.流程图:3.程序代码//信1605-320163683蔡金阳packagelesson2;importjava.util.Scanner;publicclassDigui{publicstaticintZuhe1(intn,intk){intx=1,y=1,z=1,c;for(inti=n;i 查看详情