zoukankan      html  css  js  c++  java
  • js 递归

    递归会形成递归栈,栈顶是满足条件的最后一个函数,当这个函数出栈之后,倒数第二个栈的代码继续执行。(因为代码没执行完呢)

    函数递归回来的结果值通常要保存或者赋值。这个很重要

    递归不是闭包。

    //5*4*3*2*1=120  
    //f5=5*f4 f4=4*f3 f3=3*f2 f2=2*f1 f1=1  1*2*3*4*5=f5=120
    //累积递归
    function f(a) {
        if (a <= 1) return 1
        return a * f(a - 1) //递归函数基本都要返回值或者保存值
    }
    //f2=f1+1 f3=f2+2 f4=f3+3 f5=f4+4 10+9+8+7+6+5+4+3+2+1 f10=10+f9 f9=9+f8 f8=8+f7  ... f2=2+f1 f1=1  f10=10+9+8+...+2+1
    //求和递归
    function fn1(num) {
        if (num <= 1) return 1
        return num + fn1(num - 1) //返回值
    }
    const data = [{
        id: 1,
        name: "美食",
        goods: [{
            id: 11,
            gname: "螺蛳粉"
        }, {
            id: 12,
            gname: "臭豆腐"
        }]
    }, {
        id: 2,
        name: "水果"
    }];
    
    function getID(data, id) {
        // debugger
        let obj
        for (let item of data) {
            if(item.id===id) {
                obj=item //父节点找不到就尝试找下子节点
            }else{
                if(item.goods&&item.goods.length){
                    obj=getID(item.goods,id) //赋值
    
                }
            }
        }
    
        return obj
    
    }
    console.log(getID(data, 1))
    console.log(getID(data, 11))
      //将虚拟节点 变为真实节点
    function createElm(vnode){
      let {tag,children,key,data,text}=vnode
      if(typeof tag=="string"){
        vnode.el=document.createElement(tag)
        children.forEach(child=>{
          vnode.el.appendChild(createElm(child)) //递归
        })
      }else{
        vnode.el=document.createTextNode(text)
      }
      return vnode.el
    }
  • 相关阅读:
    ISP基础(17):Gamma
    ISP基础(14):CCM
    ISP基础(15):DRC
    ISP基础(09):DPC
    机器学习基础(二):传统机器学习算法
    ISP算法(08):颜色空间
    如何seo(搜索引擎优化)
    盒模型
    less和sass的定义和区别
    src和href的区别
  • 原文地址:https://www.cnblogs.com/xiaoliziaaa/p/14374087.html
Copyright © 2011-2022 走看看