研磨数据结构与算法-06递归的应用

一,简单Demo

public class Recursion {

public static void main(String[] args) {

test(100);

}

public static void test(int n) {

if(n == 0) {

return;

}

System.out.println(n);

test2(n - 1);

}

}

二,三角数字

public class Triangle {

public static int getNumber(int n) {

int total= 0;

while(n > 0) {

total = total + n;

n--;

}

return total;

}

public static int getNumberByRecursion(int n) {

if(n == 1) {

return 1;

} else {

return n + getNumberByRecursion(n - 1);

}

}

}

测试:

public class TestTriangle {

public static void main(String[] args) {

System.out.println(Triangle.getNumber(500));

System.out.println(Triangle.getNumberByRecursion(500));

}

}

三,斐波那契数列

public class Fibonacci {

public static int getNumber(int n) {

if(n == 1) {

return 0;

} else if(n == 2){

return 1;

} else {

return getNumber(n - 1) + getNumber(n - 2);

}

}

}

测试:

public class TestFibonacci {

public static void main(String[] args) {

System.out.println(Fibonacci.getNumber(5));

}

}

时间: 2024-10-17 21:07:36

研磨数据结构与算法-06递归的应用的相关文章

研磨数据结构与算法-07递归之高级应用

汉诺塔的问题解决: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. public class HanoiTower { /** * 移动盘子 * topN:移动的盘子数 * from:起始塔座 * inter:中间塔座 * to:目标塔座 */ public

Java数据结构和算法之递归

四.递归 递归是函数调用自身的一种特殊的编程技术,其应用主要在以下几个方面:   阶乘 在java当中的基本形式是: Public  void  mothed(int n){//当满足某条件时: Mothed(n‐1): } 递归二分查找 Java二分查找实现,欢迎大家提出交流意见.  /** *名称:BinarySearch *功能:实现了折半查找(二分查找)的递归和非递归算法. *说明: *     1.要求所查找的数组已有序,并且其中元素已实现Comparable<T>接口,如Integ

数据结构与算法5: 递归(Recursion)

数据结构与算法5: 递归(Recursion) 写在前面 <软件随想录:程序员部落酋长Joel谈软件>一书中<学校只教java的危险性>一章提到,大学计算机系专业课有两个传统的知识点,但许多人从来都没搞懂过,那就是指针和递归.我也很遗憾没能早点熟练掌握这两个知识点.本节一些关键知识点和部分例子,都整理自教材或者网络,参考资料列在末尾.如果错误请纠正我. 思考列表: 1)什么程序具有递归解决的潜质? 2)递归还是非递归算法,怎么选择? 3)递归程序构造的一般模式 1.递归定义 首要引

java数据结构与算法之递归思维(让我们更通俗地理解递归)

[版权申明]转载请注明出处(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53452971 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈(Stack)设计与实现 j

java数据结构和算法06(红黑树)

这一篇我们来看看红黑树,首先说一下我啃红黑树的一点想法,刚开始的时候比较蒙,what?这到底是什么鬼啊?还有这种操作?有好久的时间我都缓不过来,直到我玩了两把王者之后回头一看,好像有点儿意思,所以有的时候碰到一个问题困扰了很久可以先让自己的头脑放松一下,哈哈! 不瞎扯咳,开始今天的正题: 前提:看红黑树之前一定要先会搜索二叉树 1.红黑树的概念 红黑树到底是个什么鬼呢?我最开始也在想这个问题,你说前面的搜索二叉树多牛,各种操作效率也不错,用起来很爽啊,为什么突然又冒出来了红黑树啊? 确实,搜索二

数据结构与算法之递归

递归: 定义:一个函数自己直接或间接调用自己 (不要写成死递归) 举例: 1. 1+2+3+4+...+100的和 求阶乘 汉诺塔 走迷宫   函数的调用(以C语言为例) 当一个函数的运行期间调用另一个函数时,在运行被调用函数之前,系统需要完成三件事: 将所有的实际参数,返回地址(即调用函数的位置,等到调用函数执行完毕后返回这个位置,继续执行下面的代码)等信息传递给被调函数保存 为被调函数的局部变量(也包括形参)分配存储空间 将控制转移到被调函数的入口 从被调函数返回主调函数之前,系统也要完成三

数据结构与算法——暴力递归

暴力递归就是尝试 1, 把问题转化为规模缩小了的同类问题的子问题 2, 有明确的不需要继续进行递归的条件(base case) 3, 有当得到了子问题的结果之后的决策过程 4, 不记录每一个子问题的解 一定要学会怎么去尝试,因为这是动态规划的基础,这一内容我们将在提升班讲述 汉诺塔问题 打印n层汉诺塔从最左边移动到最右边的全部过程 public static void hanoi(int n) { if (n > 0) { func(n, "左", "右",

【数据结构与算法】递归汉诺塔

汉诺塔 汉诺塔是根据一个传说形成的数学问题(关于汉诺塔): 有三根杆子A,B,C.A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆: 每次只能移动一个圆盘: 大盘不能叠在小盘上面. 提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则. 递归汉诺塔 解题思路: 可以把问题简化成2个盘子的情况,如:A上有两个盘子,B和C是空的.如果要把A的两个盘子全部移动到C,需要经过以下步骤: 1.A移动一个盘子到B 2.A移动一个盘

数据结构和算法06 之2-3-4树

从第4节的分析中可以看出,二叉搜索树是个很好的数据结构,可以快速地找到一个给定关键字的数据项,并且可以快速地插入和删除数据项.但是二叉搜索树有个很麻烦的问题,如果树中插入的是随机数据,则执行效果很好,但如果插入的是有序或者逆序的数据,那么二叉搜索树的执行速度就变得很慢.因为当插入数值有序时,二叉树就是非平衡的了,它的快速查找.插入和删除指定数据项的能力就丧失了. 2-3-4树是一个多叉树,它的每个节点最多有四个子节点和三个数据项.2-3-4树和红-黑树一样,也是平衡树,它的效率比红-黑树稍差,但