- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- System.out.println("请输入一个整数:");
- int theNumber = sc.nextInt();
- int theAnswer = triangle(theNumber);
- System.out.println("Triangle="+theAnswer);
-
- }
-
- public static int triangle(int n) {
- if (n == 1) {
- return 1;
- }else {
- return n+triangle(n-1);
- }
- }
-
复制代码
以上是毕达哥拉斯的递归方法;
毕达哥拉斯数字: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的理解以及代码的效率都很有好处.
声明:
小白一枚,有误请指正. |
|