黑马程序员技术交流社区

标题: 方法的递归 [打印本页]

作者: cain    时间: 2014-6-8 14:26
标题: 方法的递归
递归函数即自调用函数,在函数体内直接或间接的调用自己,即函数的嵌套是函数本身。
递归调用又分为直接调用和间接调用

递归的方法是程序设计中有效的方法,采用递归编写程序能使程序变得简洁和清晰.。

所谓递归,是指程序调用自身,当然,递归不会无休止地调用下去,它必然有一个出口,当满足条件时程序也就结束了,不然的话,那就是死循环了。

/递归方法DecimalToBinary,把一个十进制数转换成二进制数
      public static void DecimalToBinary(int num){
             if(num ==0){        //当num=0时,循环结束
                    return;
             }else{
                    DecimalToBinary(num/2);  //调用递归方法
                    System.out.print (num%2);
             }
             }

      //递归方法sum,求1+2+...+100 的求和
      public static int sum(int num){
             if(num > 0){
                    return num + sum(num-1); //调用递归方法
             }else{
                    return0;      //当num=0时,循环结束
             }

      }   



作者: cain    时间: 2014-6-8 14:28
     在java语言中,使用递归调用时,如果过多的调用容易造成java.lang.StackOverflowError即栈溢出和程序执行过慢。这是一个潜在Bug和影响程序执行效率问题,需要谨慎使用。

在开发时,要注意避免该问题,特别是递归过多调用时,最好改为for或者whlie来代替。

平时也不建议用递归的,效率太低了 .  

那么既然提供了 递归的 方法,那么久有它存在的价值,到底在什么时候用,需要大家在实践中 总结经验
作者: xp8812    时间: 2014-6-8 15:31
留个名,下次慢慢看
作者: 陈君    时间: 2014-6-8 16:21
递归可以把一些复杂的问题简单化,比如汉诺塔,如果用循环写的话会感觉无从下手。但是如果告诉你这个问题可以用递归的话你就会发现这个问题好简单,简简单单的几行代码就搞定了。
作者: 淡淡柠檬茶    时间: 2014-6-8 16:27
cain 发表于 2014-6-8 14:28
在java语言中,使用递归调用时,如果过多的调用容易造成java.lang.StackOverflowError即栈溢出和程序 ...

路过 给个赞
作者: 今生无憾    时间: 2014-6-8 16:28
我一般使用递归,是在解决有规律的问题时使用,这种问题普遍有一个特点,就是后一个结果是可以通过前一个结果经过相同的运算得来。 这样就符合了递归的思想,循环调用自身。
作者: 丁绍然    时间: 2014-6-8 18:50
都是来水经验的么
作者: 博€$€海    时间: 2014-6-8 20:37
递归确实是好方法,但未必效率就高啊
作者: 无所谓啦    时间: 2014-6-18 22:27
递归,是指程序调用自身。我记住啦




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