【数据结构】递归调用学习

 在回顾数据结构的时候,重新学习了一下对递归的使用,希望对您有帮助。

package com.qxlx;
/**
 * 循环改递归
 * 	改为递归的关键是发现逻辑 相似性
 * 不要忘记递归出口
 * 构造相似性
 *    如果没有明显的相似性,,需要主动构造
 * 		不能相似的原意很可能是缺少参数
 * 		递归与数学上的的递推公式和类似
 * @author jia
 * 
 *
 */
public class A {
	/**
	 * 	f(9)
	 * 		f(8)
	 * 			f(7)
	 * 				f(6)
	 * 					f(5)
	 * 						f(4)
	 * 							f(3)
	 * 								f(2)
	 * 									f(1)
	 * 										f(0)
	 * 										
	 * 										  0
	 * 									1
	 * 								 2
	 * 						     3
	 * 						 4
	 * 					  5
	 * 				  6
	 * 			  7	
	 * 	 	  8
	 * 	  9
	 * 
	 * 对递归的理解
	 *  程序的需求是通过使用递归,打印出0-9之间的数字
	 *  但是我们传递的参数是9,为什么先打印出的是0 然后 1 2 3 4这样的顺序的
	 *  	原因就是在调用程序的时候,f(9)的时候,会递归调用f(8)。而此时f(9) 应该打印的值 9 会被存储到一个临时栈中
	 *  栈的特点就是先进后出,f(8)调用f(7),以此类推,就会到达程序的基值,当f(0)时,就会返回 0 
	 *  此时栈中从栈顶到栈尾的顺序就是 0123456789.根据栈 弹栈的特点,后近先出,所以在屏幕上就会依次打印出0---9之间的数字了、
	 *  总结:递归调用无非就是将临时值,先存储到栈中。程序到达基值的时候,就会有从栈中取出这些值、
	 * @param n
	 */
	public static void f(int n){
		//递归出口是 当n=0 的时候就会跳出循环
		if(n>0) 
			f(n-1);
		System.out.print(n);
	}
	public static void main(String[] args) {
		f(9);
	}
	
	/**
	 * 打印0到9之间的数字
	 * @param start
	 * @param end
	 */
	public  static void f2(int start,int end){
		//此时应该添加一个出口 
		if(start>end)
			return;
		System.out.println("打印的数字是:"+start);//打印出 
		f2(start+1,end);
	}
}
原文地址:https://www.cnblogs.com/qxlxi/p/12860916.html