递归

递归

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.考虑尾递归
原文地址:https://www.cnblogs.com/staystand/p/11942468.html