,,JavaScript递归详述

,,JavaScript递归详述

本文主要介绍JavaScript递归。递归是指当一个函数可以调用自己时,那么这个函数就是递归。接下来,我们来看看下面这篇文章的详细介绍。有需要的可以参考一下。希望对你有帮助。

目录

一、什么是递归?2.用递归解决数学问题1。求1 * 2 * 3 * 4 …*n 2的阶乘。寻找斐波那契数列3。通过递归寻找相应的数据对象。

一、什么是递归?

如果一个函数能在内部调用自己,它就是递归函数。简单理解:函数内部调用自己,这个函数是递归函数。

如下所示:

函数fn(){

fn();

}

fn();

这个函数就是一个递归函数,当我们直接打印时,会:

我发现了一个印刷错误。为什么?因为递归的作用和循环的作用是一样的。当没有返回值给他的时候,就会无休止的循环下去。所以,我们知道:

因为递归容易出现“堆栈溢出”错误,所以必须添加退出条件返回。

如何写出正确的递归函数?以上面的代码为例:比如我们现在要打印五次' Hello '。这时,我们应该这样写:

var num=1;

函数fn(){

console . log(' Hello ');

if(num==5){

返回;

}

num

fn();

}

fn();

打印结果为:

知道了什么是递归,我们再来看看如何用递归来解题。

二、利用递归求数学题

1、求1 * 2 * 3 * 4 …*n的阶乘

代码如下:

函数fn(n){

if(n==1){

返回1;

}

返回n * fn(n-1);

}

console . log(' 1-20的阶乘是:' fn(20));

console . log(' 1-10的阶乘是:' fn(10));

console . log(' 1-5的阶乘是:' fn(5));

打印结果为:

2、 求斐波那契数列

斐波那契数列,又称“兔子数列”,指的是这样一个数列:1,1,2,3,5,8,13,21,34,…,即第三项的值是前两项之和。用户可以输入n来获得位置的编号。

代码如下:

函数fb(n){

if(n===1 || n===2){

返回1;

}

返回FB(n-1)FB(n-2);

}

Console.log('第三个斐波那契数列值为:' FB(3));

Console.log('第10个斐波那契数列值为:' FB(10));

打印结果为:

三、利用递归求对应数据对象

根据id返回相应的数据对象

有如下所示的对象:

var date=[{

id:1,

名称:'电器',

商品:[{

id: 11,

Gname:“手机”

},{

id: 12,

Gname:“计算机”

}]

},{

id:2,

名称:'服装',

商品:[{

id : 21,

咬牙切齿:“裤子”

},{

id : 22,

Gname:“外套”

}]

},{

id : 3,

名称:“食物”

}];

现在您想通过输入id返回相应的数据对象。

首先我们可以通过for...Each()来遍历数组,得到每一项值,如下所示:

函数getId(数组,id){

array.forEach(函数(值){

console.log(值);

})

}

getId(日期,1);

打印的结果为:

这时,如果我们想要获得id为1的对象的值,可以这样操作:

函数getId(数组,id){

array.forEach(函数(值){

if(value.id===id){

console.log(值);

}

})

}

getId(日期,1);

打印结果为:

是的,但是如果我们想得到id为11的对象的值呢?显然,直接调用这个函数是不可行的,因为我们只通过for获得最外层对象的值.每一个,但是我们没有得到内层的具体分类。此时我们可以通过递归调用getId(array,Id)函数来获取内层对象的值。

操作如下:

函数getId(数组,id){

array.forEach(函数(值){

if(value.id===id){

console.log(值);

} else if(value . goods value . goods . length!=0){

getId(value.goods,id);

}

})

}

//getId(日期,1);

getId(日期,11);

打印的结果为:

这就是这篇关于JavaScript递归的文章。更多相关的JavaScript递归,请搜索我们之前的文章或者继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: