首页 > 其他分享 >js递归的使用

js递归的使用

时间:2022-12-08 11:11:55浏览次数:36  
标签:遍历 return name 递归 对象 js 使用 obj

在js中函数自己调用自己,就称为递归。

递归函数的必要条件

递归方程以及递归结束条件,即给递归函数安排出口,否则会造成无限递归,无限递归会造成执行栈溢出,浏览器会报错。

递归的用法

1.利用递归代替for循环

        //依次打印1~10
        for (var i = 1; i <= 10; i++) {
            console.log(i);
        }
 
 
        //借用递归实现
        function fn(e) {
            console.log(++e);
            if (e === 10) {
                return
            }
            fn(e)
        }
        fn(0)
二、经典案例——斐波那契数列

斐波那契数列:1,1,2,3,5,8,13......

即从第三个数开始,每一个数等于前两个数之和

用代码实现:

function f(n) {
            // 实现代码
             if (n === 1 || n === 2) {
                 return 1;
             }
            return f(n - 1) + f(n - 2);
        }
        console.log(f(8)); //21

即f(n)=f(n-1)+f(n-2)

初始化n为8,判断n是否等于1或2,否则返回f(7)+f(6),继续调用自身,以此类推直至n-1等于2以及n-2=1。

三、利用递归实现多级遍历,以及深克隆。
//创建一个对象obj,其中的friend属性也是一个对象,friend里的student也是一个对象
var obj = {
            name: 'ls',
            age: 4,
            sex: 'nan',
            friend: {
                name: 'djw',
                age: 24,
                sex: 'nan',
                student: {
                    name: 'xlq',
                    age: 23,
                    sex: 'nan'
                }
            }
        }

function clone(obj) {
            if (typeof obj != 'object') {   //判断目标对象数据类型,不是对象则直接返回
                return obj;
            }
            var newObj = {}    //创建一个空对象,用以存放遍历后克隆的属性
            for (k in obj) {
                newObj[k] = clone(obj[k]);   //用递归实现深克隆
            }
            return newObj;
        }

遍历当前对象,判断是否存在其他对象,则继续遍历,直到没有,利用递归对需要深层遍历的属性再进行遍历。

标签:遍历,return,name,递归,对象,js,使用,obj
From: https://www.cnblogs.com/huayang1995/p/16965525.html

相关文章

  • 二、TestDriven.Net常用属性介绍及使用
    准备动作1.      先到http://www.testdriven.net/download.aspx网站上下载PersonalVersion(个人版,就这个是免费的),然后安装,默认安装即可。2.      根据安装路......
  • kettle安装使用与部署
    1.下载Kettle,版本7.1,官网太慢,不要官网下载2.Kettle为java程序,需先安装jdk1.8(与kettle7.1配对)  Jdk下载地址,下载jdk-8u341-windows-i586.exe: https://www.oracle.com/......
  • java爬虫笔记:使用WebCollector增量采集www.baiduyunsousou.com
    WebCollector可以配置短点爬取,历史数据根据Key去重,也就是url 最近在采集百度云网盘,记录一下 /***@authorLiu*@create2022-08-0211:48*/@Component@Slf......
  • 使用SpringBoot时出现了找不到测试类的情况或There are test failures
    出现场景:在使用SpringBoot做单元测试时在Maven编译或打包项目时具体bug描述:Therearetestfailures或者找不到测试类解决方案:首先去运行控制台看causeby后面的......
  • 极客编程python入门-sorted函数使用
    排序算法Python内置的sorted()函数就可以对list进行排序:>>>sorted([36,5,-12,9,-21])[-21,-12,5,9,36]sorted()函数也是一个高阶函数,它还可以接收一个key函数来实......
  • vim基本使用
    vim基本使用使用方法在终端输入vim+(文件),如果文件已经存在,则使用vim打开文件,否则创建一个文件。或者,是输入vim直接进入,再输入:e+文件名,来打开文件。进入vim后默认为......
  • Python中glob类的使用
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • 10、拦截器Interceptor的使用
    1          什么是拦截器拦截器可以在请求执行流程中的某个位置拦截请求并执行代码,也可以终止请求流程的执行 2          拦截器可以做什么拦截器通常......
  • LocalDateTime去掉T,@JsonFormat有效,JSONField失效
    @ApiModelProperty(value="开机时间")@JSONField(format="yyyy-MM-ddHH:mm:ss")privateLocalDateTimebootTime;返回的结果中间有T"createTime":"2022-07-04T......
  • 如何使用 qt network 库模拟表单文件上传?
    #include<QCoreApplication>#include<QImage>intmain(intargc,char*argv[]){QCoreApplicationa(argc,argv);//[1]准备图像二进制数据QImage......