zoukankan      html  css  js  c++  java
  • 递归

    递归

    To Iterate is Human, to Recurse, Divine

    递归的定义

    递归,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法
    

    递归的三三要素

    1.明确的函数要干什么
    2.明确终止条件
    3.提取重复逻辑,去找等价关系
    

    递归思想的精髓

    递归:递是传递传递的意思,参数需要传递到下一层去,如果把递归形容成用要是打开一扇一扇的门的话,传递的就是钥匙;
    归有归还的意思,打开所有的门需要把最终的目的归还到问题开始的地方。递归的精髓是对问题的解读,需要抽象出重复的
    问题和现象,通过反复的调用将结果返回。
    

    递归的经典例子

    1.阶乘

    f(int n){
    	if(n==1)return 1;
    	return n*f(n-1);
    }
    

    2.斐波那契数列

    f(int n){
    	if(n==1||n==2){
    		return 1;
    	}
    	return f(n-1)+f(n-2);
    }
    

    3.杨辉三角

    f(int x,iny){
    	if(y<=x&&y>=0){
    		if(y==0||y==x){
    			return 1;
    		}else{
    			return f(x-1,y-1)+f(x-1,y);
    		}
    	}
    	return -1;
    }
    

    4.汉诺塔问题

    f(int level,String begin,String end){
    	if(level==1){
    		//结束
    	}else{
    		//倒数第二层移到b
    		f(level-1,a,b);
    		//再从b移到c
    		f(level-1,b,c)
    	}
    }
    

    5.二叉树深度

    f(Tree t){
    	if(t==null){
    		return 0;
    	}
    	int left=f(t.left);
    	int right=f(t.right);
    	return left>right?left+1:right+1;
    }
    

    递归的优化算法

    1.考虑重复计算的问题
    2.考虑尾递归
    
  • 相关阅读:
    归并排序
    [转]html5 Canvas画图教程(1)—画图的基本常识
    [转]浏览器工作原理
    [转]Web开发者和设计师必须要知道的 iOS 8 十个变化
    mobile web开发(1) html页面头部基本设置
    差点难产的HTML5
    感觉离开了好久
    Java----区别
    MySQL---sql语句优化
    MySQL---数据库优化
  • 原文地址:https://www.cnblogs.com/staystand/p/11942468.html
Copyright © 2011-2022 走看看