递归算法(java)
最近在用EasyUI中的tree遍历节点的时候用到了递归算法,现总结如下:
* 递归算法:在函数里调用自身,但必须确定递归出口,即结束条件,不然就是无限循环;
* 递归一般解决的问题:
1.数据的定义是按递归定义的(Fibonacci函数);
2.树的遍历,图的搜索;
3.回溯;
* 递归的缺点:
递归算法的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出。
测试了两个例子:
1.
/** * 1.求5的阶乘5=5*4*3*2*1 */ public static int Test1(int n){ if (n==0||n==1) { return 1; }else { return n*Test1(n-1); } }
2.
/** * 2.楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,有多少种走法? */ public static int Test2(int n){ if (n==1) { return 1; }else if (n==2) { return 2; }else { //这里可以这样理解:最后一次走一步Test2(n-1)或者最后一次走两步Test2(n-2) return Test2(n-1)+Test2(n-2); } } public static void main(String[] args) { System.out.println(Test2(10)); }