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.考虑尾递归
    
  • 相关阅读:
    第八周作业
    第八周上机练习
    第七周作业
    第七次上机练习
    第六周作业
    4.9上机作业
    第五周作业
    第四次JAVA作业
    第四周作业
    第十六次作业
  • 原文地址:https://www.cnblogs.com/staystand/p/11942468.html
Copyright © 2011-2022 走看看