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 也成立)
  • 相关阅读:
    Linux服务器安全审计工具与流程完全指南
    谈谈站桩
    Django Push 的一些资料
    Angularjs $http服务的两个request安全问题
    Ubuntu本地uwsgi配Django问题的解决
    Angularjs Post传值后台收不到的原因
    Flex实现双轴条状图
    时间序列学习笔记
    Nuget公布Dll
    【小游戏】有意思的小游戏集合
  • 原文地址:https://www.cnblogs.com/ssaylo/p/13465973.html
Copyright © 2011-2022 走看看