黑马程序员技术交流社区

标题: 有谁能帮忙说一下递归的详细用法以及都用在什么地方 [打印本页]

作者: 董将    时间: 2012-12-18 11:31
标题: 有谁能帮忙说一下递归的详细用法以及都用在什么地方
本帖最后由 董将 于 2012-12-22 19:51 编辑

到现在为止还是对递归这块不是很明白,期待解决

作者: 孙辉辉    时间: 2012-12-18 11:50
所谓递归,是指程序调用自身,当然,递归不会无休止地调用下去,它必然有一个出口,当满足条件时程序也就结束了,不然的话,那就是死循环了。
看下面这个类,有几个递归方法,看了之后肯定会对你学习递归很有帮助的。
  1. /**递归类Recursion的定义*/
  2. public class Recursion{
  3.       //递归方法DecimalToBinary,把一个十进制数转换成二进制数
  4.       public static void DecimalToBinary(int num){
  5.              if(num ==0){        //当num=0时,循环结束
  6.                     return;
  7.              }else{
  8.                     DecimalToBinary(num/2);  //调用递归方法
  9.                     System.out.print (num%2);
  10.              }
  11.              }
复制代码
  1. //递归方法sum,求1+2+...+100 的求和
  2.       public static int sum(int num){
  3.              if(num > 0){
  4.                     return num + sum(num-1); //调用递归方法
  5.              }else{
  6.                     return0;      //当num=0时,循环结束
  7.              }
  8.             
  9.       }   
复制代码
  1.   //递归方法yueshu,求两个数的最大公约数   ,用两个数的绝对值与这两个数较小的那个一直比较,直到相等为止。               
  2.       public static void yueshu(int num1,int num2){
  3.              if(num1 == num2){
  4.                     System.out.println(num1);  //num1=num2时,结束
  5.              }
  6.              else{
  7.                     yueshu(abs(num1-num2),min(num1,num2)); //调用递归方法
  8.              }
  9.                                  
  10.       }
复制代码
当然,关于递归最经典的是关于汉诺塔的,这个在讲到的时候肯定会讲到,
http://baike.baidu.com/view/191666.htm这个是百科的地址,你可以去看看
作者: 董将    时间: 2012-12-18 12:01
嘎嘎,多谢多谢
作者: 依然AI    时间: 2012-12-18 17:35
本帖最后由 依然AI 于 2012-12-18 17:36 编辑

程序调用自身的编程技巧称为递归( recursion)。   一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。   注意:   (1) 递归就是在过程或函数里调用自身;   (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。


上面是递归的定义,,你可以对照着看:

public class Test {         
public static void main(String[] args) {      
           output(1);        
}         
private static void output(int n) {        
         // TODO Auto-generated method stub      
           System.out.println(n);               
if(n<100){                        
n++;                       
  output(n);            
    }        
} }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2