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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Sphinx 中级黑马   /  2016-6-23 00:00  /  350 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public static void main(String[] args) {
  2.                 Scanner sc = new Scanner(System.in);
  3.                 System.out.println("请输入一个整数:");
  4.                 int theNumber = sc.nextInt();
  5.                 int theAnswer = triangle(theNumber);
  6.                 System.out.println("Triangle="+theAnswer);
  7.                
  8.         }
  9.        
  10.         public static int triangle(int n) {
  11.                 if (n == 1) {
  12.                         return 1;
  13.                 }else {
  14.                         return n+triangle(n-1);
  15.                 }
  16.         }
  17.        
复制代码

以上是毕达哥拉斯的递归方法;
      毕达哥拉斯数字:1,3,6,10,15,21....得出的规律是:a(n) = a(n-1)+n,在返回1之前,实际上有五个triangle()方法实例存在.最外层传入的参数是5,最内层传入的参数是1.实际上,采用递归是因为它从概念上简化了问题,而不是因为它本身更有效率.
      尽管上诉方法很短,但是它拥有所有递归算法都具备的关键特征:1.调用自身;2.当它调用自身的时候,是为了解决更小的问题.3.存在某个足够简单的问题的层次,在这一层不需要调用自己就能直接解答,并返回结果.
      还有两天学习递归,提前看了点东西.除了上面的这个例子以外,汉诺塔和归并排序也是很经典的例子,比上述复杂得多,有兴趣的同学可以看看,今后有空会再来更新.
       在啰嗦几句,归并排序的时间比冒泡.选择.插入都要少,前者只要O(N*logN),后者需要O(N^2).
中心思想:
      归并两个已经有序的数组.归并两个有序数组A和B,就生成了第三个数组C.数组C包含A和B中的所有数据项,并且使他们有序的排列在数组C中.
思路:
      把一个数组分成两部分.对两个部分分别进行排序.根据递归的思想,这两个数组又可以分成4个数组...反复切割,直到得到的子数组只含有一个数据项,这就是基值条件:设定只有一个数据项的数组是有序的.
关于时间:
     用通俗的话来说,根据数据结构的不同,所需时间与事件量的对应关系.个人感觉数据结构还是有些作用的,比如之前学习集合中的红黑树,B树(二叉树的一种),双链,单链等,在数据结构的知识体系中,类似的还有Tree234,B+,B-,B*,平衡树和非平衡树,图,有权图等.了解原理之后,对Java的理解以及代码的效率都很有好处.
声明:
     小白一枚,有误请指正.

1 个回复

倒序浏览
之后会再来更新,汉诺塔还没弄明白,过两天学完递归再来.也许会补充一些除递归以外的数据结构.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马