A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cain 中级黑马   /  2014-6-8 14:26  /  1446 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

递归函数即自调用函数,在函数体内直接或间接的调用自己,即函数的嵌套是函数本身。
递归调用又分为直接调用和间接调用

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

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

/递归方法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时,循环结束
             }

      }   


8 个回复

倒序浏览
     在java语言中,使用递归调用时,如果过多的调用容易造成java.lang.StackOverflowError即栈溢出和程序执行过慢。这是一个潜在Bug和影响程序执行效率问题,需要谨慎使用。

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

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

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

路过 给个赞
回复 使用道具 举报
我一般使用递归,是在解决有规律的问题时使用,这种问题普遍有一个特点,就是后一个结果是可以通过前一个结果经过相同的运算得来。 这样就符合了递归的思想,循环调用自身。
回复 使用道具 举报
都是来水经验的么
回复 使用道具 举报
递归确实是好方法,但未必效率就高啊
回复 使用道具 举报
递归,是指程序调用自身。我记住啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马