zoukankan      html  css  js  c++  java
  • 递归 理论(肌肉记忆)

    递归 理论(肌肉记忆)

    递归 循环
    通过函数体来进行的循环

    从前有座山
    山里有个庙
    庙里有个和尚讲故事
    返回 71

    就像盗梦空间

    • 向下进入到不同的梦境中,然后又向上回到原来的一层
    • 通过声音同步回到上一层
    • 每一层的环境和周围的人都是一份拷贝,主角等几个人穿越不同层级的梦境(发生和携带变化)
      递归就像剥洋葱,内部就是栈的形式

    递归是有一个代码模板的
    pyrhon形式

    def recursion(level, param1, param2, ...):
    	# recursion terminator
    	if level > MAX_LEVEL:
    	process_result
    	return
    
    	# process logic in current level
    	process(level, data...)
    	
    	# drill down
    	self.recursion(level+1, p1, p2, ...)
    	
    	# reverse the current level status if needed
    

    javascript形式

    function recursion(level, param1, param2, ...) {
    	// 递归终结条件(一开始就来写递归)
    	if(level > MAX_LEVEL) {
    		// 处理递归结果
    		process_result;
    		// 返回最终值
    		return;
    	}
    
    	// 处理当前层的逻辑
    	process(level, data);
    	
    	// 下探到下一层,调用自身进行递归
    	recursion(level + 1, p1, p2, ...)
    	// 有时候这一层有一些东西需要清理,但是有时候又不用
    }
    

    java

    public void recur(int level, int param) {
    	// terminator
    	if(level > MAX_LEVEL) {
    		// process result
    		// return;
    	}
    	// process current logic
    	process(level, param);
    	// drill down
    	recur(level: level + 1, new Param);
    	// restore current status
    }
    

    思维要点

    1. 不要人肉进行递归(最大误区,不要去画递归的状态树,直接看函数本身开始写即可,一定要熟练使用递归)
    2. 找到最近最简的方法,然后将其拆解成可以重复解决的问题(重复的子问题)
      if for while else loop 然后就是 recursion
    3. 数学归纳法思维(最开始 n=1 n=2 的时候成立 证明 n 成立的时候,n + 1 也成立)
  • 相关阅读:
    CKEDITOR最新版不能上传图片的解决
    Java Web开发之Servlet获取ckeditor内容
    『实践』Java Web开发之分页(ajax)
    Java开发之JSP行为
    [Wpf学习] 1.传说中的Main
    直接使用汇编编写 .NET Standard 库
    ASP.NET CORE 启动过程及源码解读
    使用EventBus + Redis发布订阅模式提升业务执行性能(下)
    Android 实现浏览器跳转APP应用,网页也可以跳转APP
    Python全栈(七)Flask框架之1.Flask简介与URL和视图介绍
  • 原文地址:https://www.cnblogs.com/ssaylo/p/13465973.html
Copyright © 2011-2022 走看看