黑马程序员技术交流社区

标题: 最近遇到的递归算法,分享下 [打印本页]

作者: LoveMyself    时间: 2015-5-23 02:27
标题: 最近遇到的递归算法,分享下
本帖最后由 LoveMyself 于 2015-5-23 02:31 编辑
  1. public class feibonaqi {
  2.         /**
  3.          * 1.遍历出斐波那契数列前100个数
  4.          */
  5.         public static void main(String[] args) {
  6.                 method_1(100);
  7.         }

  8.         public static int method(int i) {
  9.                 // 前两项不在通项范围
  10.                 if (i == 1 || i == 2) {
  11.                         // 前两项返回自身的值1
  12.                         return 1;
  13.                 } else {
  14.                         // 此数列从第三项开始每一项的值是前两项的和(规律)
  15.                         // 递归算法,在此方法之内调用本方法
  16.                         return method(i - 1) + method(i - 2);
  17.                 }
  18.         }

  19.         public static void method_1(int n) {
  20.                 // 此处i控制的是角标,n控制的是项数
  21.                 for (int i = 1; i <= n; i++) {
  22.                         System.out.println("这是斐波那契数列第" + i + "项");
  23.                         // 对根据项数对每一项进行遍历输出
  24.                         System.out.println(method(i));
  25.                 }
  26.         }
  27. }
复制代码
  1. </blockquote></div><div class="blockcode"><blockquote>
  2. public class test {
  3.         /*
  4.          * 2、递归算法求和
  5.          */
  6.         static int sum = 0;
  7.         static int flag =0;
  8.         public static void main(String[] args) {
  9.                 int[] num = {4,6,8,2,10};
  10.                 //用递归算法求和
  11.                 recursionAdd(num);
  12.                 System.out.println("sum="+sum);
  13.         }
  14.         public static void recursionAdd(int[] num)
  15.         {
  16.                 //求和
  17.                 sum = sum +num[flag];
  18.                 //根据标记flag的变化,来取数组内元素
  19.             flag++;
  20.             //递归结束条件
  21.            if(flag<num.length)
  22.             {
  23.                    //递归算法
  24.                      recursionAdd(num);
  25.             }
  26.         }
  27. }
复制代码

通过练习,及网上查找,一致认为递归算法效率很低,想知道原因?
作者: 冷月霜飞    时间: 2015-5-23 06:39
感谢师兄分享~
作者: 王建伟    时间: 2015-5-23 07:22
因为递归,例如第一题,想要求值,必须要进行前两项的相加,如此循环,效率就低多了。
作者: LoveMyself    时间: 2015-5-23 10:22
王建伟 发表于 2015-5-23 07:22
因为递归,例如第一题,想要求值,必须要进行前两项的相加,如此循环,效率就低多了。 ...

貌似也是,每次两项相加,都要把流程再走一遍,比较耗资源!这么说来,效率连for 和while 高都么有了
作者: LoveMyself    时间: 2015-5-23 10:24
冷月霜飞 发表于 2015-5-23 06:39
感谢师兄分享~

现在应该还不是师兄吧
作者: hzhzhen    时间: 2015-5-23 10:57
谢谢分享。。。。。。。。
作者: 李志鹏    时间: 2015-5-23 12:06
不错,顶一个
作者: 南山忆    时间: 2015-5-23 12:26
基础题里面的
作者: lucien_he    时间: 2015-5-23 12:41
研究研究      总感觉  基础 不是很好
作者: hydrogen11    时间: 2015-5-23 13:10
楼主总结的不错喔!
作者: 冷雨敲窗被未温    时间: 2015-5-23 14:44
不明觉厉!
作者: Iterator    时间: 2015-5-23 19:26
大神,干的不错呀!
作者: haoguan10    时间: 2015-5-23 19:28
不错,顶一个
作者: wwb1105    时间: 2015-5-23 21:43
这个我们都还木有学




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