算法--方法递归

Posted LinkinPark8林肯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法--方法递归相关的知识,希望对你有一定的参考价值。


方法递归:一个方法体内调用它本身,被称为方法递归。英语是recursive,[rɪˈkɜ:sɪv]。

方法递归包含了一种隐式的循环,它会重复执行某种代码,但这种重复执行无须循环控制。

递归有一条最重要的规定:递归一定要向已知方法递归,否则就是一个死循环

递归是非常有用的,例如希望遍历某个路径下的所有文件,但这个路径下文件夹的深度是未知的,那么就可以使用递归来实现这个需求。系统可定义一个方法,该方法接受一个

文件路径作为参数,该方法可遍历当前路径下的所有文件和文件路径,该方法中再次调用该方法本身来处理该路径下的所有文件路径。


为了更好的记住递归的规定,下面是2个数学题:

1,已知有一个数列:f(0)=1,f(1)=2,f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数,求f(10)的值;

2,已知有一个数列:f(20)=1,f(21)=2,f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数,求f(10)的值;

/**
 * 递归方法测试:
 * 只要一个方法的方法体内再次调用了方法本身,这就是一个递归方法
 * 递归一定要向已知方法递归,否则就是一个死循环
 * 
 * @author LinkinPark
 *
 */
public class RecursiveTest


	public static int test(int n)
	
		if (n == 0)
		
			return 1;
		
		else if (n == 1)
		
			return 2;
		
		else
		
			return 2 * test(n - 1) + test(n - 2);
		
	

	public static int test1(int n)
	
		if (n == 20)
		
			return 1;
		
		else if (n == 21)
		
			return 2;
		
		else
		
			// 不可以和上面写成一样,递归一定要向已知的方法递归
			return test(n + 2) - 2 * test(n + 1);
		
	

	public static void main(String[] args)
	
		// 循环的次数一样,初始值一样,所以最终2次输出结果相同:5741
		System.out.println(test(10));
		System.out.println(test1(10));
	


以上是关于算法--方法递归的主要内容,如果未能解决你的问题,请参考以下文章

kalman 一维递归算法 MATLAB演示

kalman 一维递归算法 MATLAB演示

kalman 一维递归算法 MATLAB演示

DS二叉树--后序遍历非递归算法

Heap's Algorithm - Python 中用于生成排列的非递归方法

递归算法