1,什么是递归函数:如果一个函数在内部可以调用其本身,那么这个函数就是递归函数
2,简单理解函数内部自己调用自己,这个函数就是递归函数
3,递归函数的作用和循环效果一样
死递归写法:
- function fn() {
- fn();
- }
- fn();
一般写法:递归里面必须加退出条件
- var num = 1;
- function fun() {
- console.log("打印5句话");
- if (num == 6) {
- return; //递归里面必须加退出条件
- }
- num++;
- fn();
- }
- fn();
利用递归函数求1-n的阶乘1*2*3*4*5*..n
- function fn(n) {
- if (n == 1) {
- return 1;
- }
- return n * fn(n - 1)
- }
- console.log(fn(3)); // 6
- console.log(fn(4)); // 24
-
-
-
- //详细分析:假如用户输入的是3
- // return 3 * fn(3 - 1)
- // return 3 * fn(2)
- // return 3 * (2 * fn(1))
- // return 3 * (2 * 1)
- // return 3 * (2)
- // return 6
利用递归函数求斐波那契数列(兔子序列)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)); //2
- console.log(fb(6)); //8
利用递归遍历数据
data数组中有两个对象1与2,1中又有两个对象11与12
- var data = [{
-
- id: 1,
- name: '家电',
- goods: [{ id: 11, name: '冰箱' }, { id: 12, name: '洗衣机' }]
-
-
- }, {
-
- id: 2,
- name: '服饰'
-
- }];
需求:我们想输入id号就可以拿到返回的数据对象
1,利用forEach 去遍历里面的每一个对象
- function getID(json, id) {
-
- json.forEach(function (item) {
-
- // console.log(item); //2个数组元素
-
- if (item.id == id) {
-
- console.log(item);
-
-
-
- //2,我们想要得到里层的数据 11 12 可以用递归函数来做
- //里面要有goods这个数组并且数组的长度不为0
-
-
- } else if (item.goods && item.goods.length > 0) {
-
- getID(item.goods, id);
-
- }
-
- })
-
- }
-
- console.log(getID(data, 1));
- console.log(getID(data, 2));
- console.log(getID(data, 11));
- console.log(getID(data, 12));
根据上面的只是打印,现在要求数据返回给我们
- var data = [{
- id: 1,
- name: '家电',
- goods: [{
- id: 11,
- name: '冰箱',
- goods: [{
- id: 111,
- name: '海尔冰箱'
-
- }, {
- id: 112,
- name: '美的洗衣机'
- }]
-
- }, {
- id: 12,
- name: '洗衣机'
- }]
-
- }, {
- id: 2,
- name: '服饰'
- }];
-
-
- //想输入id号就可以拿到返回的数据对象
- //1,利用forEach 去遍历里面的每一个对象
-
-
- function getID(json, id) {
- var o = {};
- json.forEach(function (item) {
- // console.log(item); //2个数组元素
- if (item.id == id) {
- // console.log(item); 不需要打印直接保存给o就可以了
- o = item
-
-
-
- //2,我们想要得到里层的数据 11 12 可以用递归函数来做
- //里面要有goods这个数组并且数组的长度不为0
-
-
- } else if (item.goods && item.goods.length > 0) {
-
- o = getID(item.goods, id);
-
- }
-
- });
-
- return o;
-
- }
-
- // getID(data, 1)
-
- // getID(data, 2)
-
- // getID(data, 11)
-
- // getID(data, 12)
-
-
-
- console.log(getID(data, 1));
-
- console.log(getID(data, 2));
-
- console.log(getID(data, 11));
-
- console.log(getID(data, 12));
-
- console.log(getID(data, 111));
-
- console.log(getID(data, 112));