本文主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。