在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1450|回复: 2

[求助] SKILL 递归原理求大佬解释

[复制链接]
发表于 2023-1-13 16:52:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
哪位大佬能不能详细的解释下 递归函数的原理哈?谢谢
网上找到的这个没看明白。

procedure(ycRecursiveProject(\@optional cv(geGetEditCellView()) "d")
    prog((insts viewNames viewName master)

        unless(boundp('masters) masters = nil)
        unless(boundp('ignoreLibNames) ignoreLibNames = nil)

        ; 优先处理顶层的操作放这里
        printf("Opened \t libName : %s \t cellName : %s \n" cv~>libName cv~>cellName)
        ; dbCreateRect(cv "MET6" list(0:0 10:300))
        ;;;;;;;;;;;;;;;;;;;;;;;;;;

        insts = cv~>instances
        foreach(inst insts
            case(cv~>cellViewType
                ("schematic"
                    ; schematic 虽然调用的是 symbol ,但需要处理的是 schematic
                    viewNames = inst~>master~>cell~>views~>name
                    if(member("schematic" viewNames)
                        viewName = "schematic"
                        viewName = nil
                    )
                )
                ("maskLayout"
                    viewName = inst~>viewName
                )
            )
            if(viewName
                master = dbOpenCellViewByType(
                    inst~>libName
                    inst~>cellName
                    viewName
                    nil
                    "r" ; 这里用的是只读模式,需要编辑内容的时候改为追加模式 "a" 即可。
                )
                master = nil
            )
            when(master && !member(master masters)
                unless(member(inst~>libName ignoreLibNames)
                    ycRecursiveProject(master)
                )
            )
        )

        ; 优先处理底层的操作放这里

        ;;;;;;;;;;;;;;;;;;;;;;;;;;

        masters = append1(masters cv)
        ;-----------------
        ; 看情况保存。
        ; dbSave(cv)
        ; dbClose(cv)
    )
); ycRecursiveProject


45f07166bddcd586f364b249fcd802c0.jpg
发表于 2023-1-13 18:04:59 | 显示全部楼层
要解释什么?递归,说白了就是自己调用自己,但是每次调用所含的参数会不同,结果可以一并收集,也可以就地保存然后一级一级退出来。递归执行的顺序是由搜索算法决定的,可以是depth first search, 也可以是breadth first search. 这就已经把递归的学问说完了啊。
发表于 2023-1-16 10:21:21 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-18 23:57 , Processed in 0.016391 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表