如果一个函数在内部调用自身,这个函数就是递归函数。
如下案例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
var num = 1
function fn () {
console.log('打印6句话');
if(num == 6) return //递归里必须加退出条件
num++
fn()
}
fn()
</script>
</body>
</html>
结果为:
递归的应用:利用递归求阶乘
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function fn(n) {
if(n == 1) return 1
return n * fn(n-1)
}
console.log(fn(4));
console.log(fn(5));
</script>
</body>
</html>
求斐波那契数列:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function fn(n) {
if(n == 1 || n == 2) return 1
return fn(n - 1) + fn(n - 2)
}
console.log(fn(5));
console.log(fn(6));
</script>
</body>
</html>
利用递归遍历数据:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<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 = {}
json.forEach(function(item){
// console.log(item);
if(item.id === id) {
o = item
// console.log(item);
//2.我们想要得到里层的数据可以利用递归函数
//找到goods这个数组 这个数组的长度不为零
} else if (item.goods && item.goods.length != 0){
o = getID(item.goods, id) //这里的递归 在遍历完成之后就停止了 不需要跳出的条件
//而且这里只是调用了这个函数 拿到了这个数据 没有对其进行赋值操作
}
})
return o
}
console.log(getID(data, 1));
console.log(getID(data, 11));
console.log(getID(data, 111));
</script>
</body>
</html>