java 递归详解

刚学java的时候通常难以理解递归程序设计的概念。递归思想之所以困难,原因在于它非常像是循环推理(circular reasoning)。它也不是一个直观的过程;当我们指挥别人做事的时候,我们极少会递归地指挥他们。

对刚开始接触计算机编程的人而言,这里有递归的一个简单定义:当函数直接或者间接调用自己时,则发生了递归。

递归是一种常见的解决问题的方法,寄把问题逐渐简单化。递归的基本思想就是
“自己调用自己”,一个使用递归技术的方法会直接或间接的调用自己
递归构造包括两个部分:
定义递归头。什么时候不调用自身方法,如果没有头,将陷入死循环
递归体。什么时候需要调用自身方法

其实递归算法很简单,简单点就是自己调用自己的方法,有条件判断什么时候停止!

递归的经典示例

计算阶乘是递归程序设计的一个经典示例。计算某个数的阶乘就是用那个数去乘包括 1 在内的所有比它小的数。例如,factorial(5) 等价于5*4*3*2*1,而 factorial(3) 等价于 3*2*1

阶乘的一个有趣特性是,某个数的阶乘等于起始数(starting number)乘以比它小一的数的阶乘。例如,factorial(5) 与 5 * factorial(4) 相同。您很可能会像这样编写阶乘函数:

[html]  view plain  copy
  1. package cn.itcast.heima2;  
  2.   
  3. /**  
  4.  * 测试方法  
  5.  * @author lyy  
  6.  */  
  7. public class TraditionalThread {  
  8.       
  9.     public static long factorial(int n){  
  10.         if(n == 1){//递归体  
  11.             return 1;  
  12.         }else{//递归头  
  13.             return n*factorial(n-1);  
  14.         }  
  15.     }  
  16.       
  17.         public static void main(String[] args) {  
  18.             long num = factorial(10);  
  19.             System.out.println(num);  
  20.         }  
  21. }     

示例二:
[html]  view plain  copy
  1. package cn.itcast.heima2;  
  2.   
  3. /**  
  4.  * 测试方法  
  5.  * @author lyy  
  6.  */  
  7. public class TraditionalThread {  
  8.       
  9.     private static int a = 0;  
  10.       
  11.     public static void test01(){  
  12.         a++;  
  13.         System.out.println("test——"+a);  
  14.         if(a <= 10){//递归头  
  15.             test01();  
  16.         }else{//递归体  
  17.             System.out.println("over!");  
  18.         }  
  19.     }  
  20.       
  21.     public static void test02(){  
  22.         System.out.println("test02");  
  23.     }  
  24.   
  25.   
  26.       
  27.         public static void main(String[] args) {  
  28.         test01();  
  29.         }  
  30. }     
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值