在回顾数据结构的时候,重新学习了一下对递归的使用,希望对您有帮助。
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);
}
}