递归与递归算法实例(java实现)
一、递归介绍
递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。绝大 多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。
定义: 一个方法在执行过程中调用自身, 就称为 “递归”。
如下图是递归算法的经典实例——hanoi塔问题
二、递归算法实例
1、猴子吃桃:猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,有多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,有多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?
public static void main(String[] args) {int peach = peach(1);System.out.println(peach);}/*** @param n 第几天* @return*/public static int peach(int n){if(n == 10){return 1;}return (peach(n + 1) + 1) * 2;}
运行结果:
2、不死神兔:一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?
案例分析:
第一个月小兔子没有繁殖能力,所以还是一对;
两个月后,生下一对小兔子,总数共有两对;
三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,总数共是三对;
依次类推。
思路:
这个数列的第1和2项属于固定值,F(1)=1,F(2)=1,;
从第三项开始,F(n)=F(n - 1)+F(n - 2),可以使用递归实现,并要有一个出口;
public class FibonacciSequenceTest {public static void main(String[] args) {// 调用方法,获取12个月后的对数int total =fun(12);System.out.println("一年后兔子总对数是:"+total);}// 定义递归放获取对应月数的兔子总对数public static int fun(int m){if(m==1 || m==2) {return 1;}else {// 递归调用,求取前2个月对数之和return fun(m-1)+fun(m-2);}}
}
运行结果:
3、小球落地:小球从100米高空落下,每次弹起高度为原来的一半,问第10次小球落地,小球共经过多少米?
public static void main(String[] args) {double height = height(10, 100);System.out.println(height);}/**** @param n : 第几次落地* @param length : 初始高度* @return*/public static double height(int n,double length){if (n == 1){return 100;}return length + height(n - 1,length / 2);}
运行结果:
4、递归实现二分查找
public class BinarySearchTest {public static void main(String[] args) {// 定义一个有序数组 int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// 调用递归算法查找元素位置int key=4;int index= binSearch(arr, 0, arr.length-1, key);// 输出结果System.out.println(key+"数字在数组的角标位置是:"+index);}// 定义递归二分算法public static int binSearch(int arr[], int start, int end, int key) {int mid = start + (end - start) / 2;// 找到对应元素if (arr[mid] == key) {return mid;}if (key > arr[mid]) {// 递归调用二分查找return binSearch(arr, mid + 1, end, key);} else if (key < arr[mid]) {// 递归调用二分查找return binSearch(arr, start, mid - 1, key); }// 没有找到,返回-1标志if (start >= end) {return -1;}return -1;}
}
递归与递归算法实例(java实现)相关推荐
- java中的递归算法_java递归算法实例分析
递归算法设计的基本思想是: 对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解. 在做递归算法的时候,一 ...
- 数据结构基础 之 递归算法实例讲解
在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法. 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易 ...
- 递归算法实例应用(五)
递归算法实例应用(五) 算24 (POJ 2787) Description 给出4个小于10的正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式.现在的问题是,是否存在一种方 ...
- 递归算法实例应用(四)
递归算法实例应用(四) 爬楼梯 (POJ 4017) Description 树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数 例如:楼梯一共有3级,他可以每次都走一级,或者第一 ...
- 非递归遍历N-ary树Java实现
2019-03-25 14:10:51 非递归遍历二叉树的Java版本实现之前已经进行了总结,这次做的是非递归遍历多叉树的Java版本实现. 在非递归遍历二叉树的问题中我个人比较推荐的是使用双whil ...
- python爬虫beautifulsoup爬当当网_Python爬虫包 BeautifulSoup 递归抓取实例详解_python_脚本之家...
Python爬虫包 BeautifulSoup 递归抓取实例详解 概要: 爬虫的主要目的就是为了沿着网络抓取需要的内容.它们的本质是一种递归的过程.它们首先需要获得网页的内容,然后分析页面内容并找到 ...
- php 递归中的全局变量,PHP中递归的实现实例详解
递归的定义 递归(http:/en.wikipedia.org/wiki/Recursive)是一种函数调用自身(直接或间接)的一种机制,这种强大的思想可以把某些复杂的概念变得极为简单.在计算机科学之 ...
- Python爬虫包 BeautifulSoup 递归抓取实例详解
Python爬虫包 BeautifulSoup 递归抓取实例详解 概要: 爬虫的主要目的就是为了沿着网络抓取需要的内容.它们的本质是一种递归的过程.它们首先需要获得网页的内容,然后分析页面内容并找到另 ...
- Java实例——Java方法
转:https://www.runoob.com/java/java-examples.html Java实例--Java方法 1.方法重载 方法重载--有时候需要使用相同的方法,得出不一样的结果. ...
最新文章
- CLR via C#深解笔记二 - 类型设计
- 盘点Git的那些冷门玩法
- C++ Primer这本书怎么样?
- mysql 学习笔记05 统计函数的相关使用
- C++_函数_函数的占位参数_函数重载---C++语言工作笔记034
- 唐山大地震 昨夜万人首映 尚雯婕演唱《23秒,32年》使观众情绪得以第二次温暖爆发...
- Vue的调试工具(Chrome 浏览器)配置
- springmvc配置拦截器及测试详解
- 图像处理--最大内接圆
- 恒生电子:控股股东恒生集团股权变更已完成工商变更登记手续
- shell脚本获取cpu使用率
- 深入了解机器学习 (Descending into ML):训练与损失
- mysql virt虚拟内存_Java进程VIRT虚拟内存
- Maven server structure problem
- iKinds:我是如何一步步重构改造项目从单VC到多VC界面(上)
- web部署到服务器显示404,WAR包部署到服务器的tomcat下404报错
- 电子签章过程中的原始数据处理
- JDK1.8源码分析:阻塞队列LinkedBlockingQueue与BlockingDeque(双端)的设计与实现
- 小技巧!如何把小图拼接成长图,将长图切成小图
- ysscloud怎么用_ysscloud官方下载