递归
在方法的内部调用该方法本身的编程方式
如图所示,四个函数可以看做都是一个方法,只不过为了区分流程画成了四个,数据从第一个入口进入该方法,符合一定条件之后反复调用本身,直到符合条件不需要调用本身时将结果一层一层返回,直到第一层输出
fabonacci(斐波那契) 实现
又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…… 从第三个开始它本身时前两个数的和,以此类推
递归实现:
package com.company;
/**
* @author Shuoshi.Yan
* @package:com.company
* @className:fabonacci数列
* @description:
* @date 2019-11-08 14:27
* @version:V1.0
* @NOTICE:本内容仅限于xxx有限公司内部传阅,禁止外泄以及用于其他的商业项目
* @ Copyright xxx. All rights reserved.
**/
public class Fabonacci {
// 1 1 2 3 5 8 ...
public static int test(int i){
//因为前两个都是1所以返回1
if(i ==1 || i == 2){
return 1;
}else{
//取它的上一个和上上个的和
return test(i -1) + test(i - 2);
}
}
public static void main(String[] args) {
// 1 1 2 3 5 8 13 21 ...
System.out.println("第8个为:" + test(8));
}
}
结果:
Hano(汉诺塔) 实现
看代码之前建议先玩一下"汉诺塔"游戏
代码实现:
package com.company;
/**
* @author Shuoshi.Yan
* @package:com.company
* @className:(Hano)汉诺塔
* @description:
* @date 2019-11-08 17:28
* @version:V1.0
* @NOTICE:本内容仅限于xxx有限公司内部传阅,禁止外泄以及用于其他的商业项目
* @ Copyright xxx. All rights reserved.
**/
public class HanNuoTa {
/**
*
* @param n 共n个需要放置
* @param start 第一个位置
* @param between 中间位置
* @param end 目标位置
* 需要注意的是:需要
*/
//可以将除了最后一层的看作一个整体,把这个整理放置到中间位置,把最有一个放置到目标位置
public static void getHano(int n,String start,String between,String end){
//若只有一个将这个从start放置到目标位置
if(n == 1){
System.out.println("将" + n + "从" + start + "放置到" + end);
}else{
//若不是一个,将除了倒数第二个的所有从第一个位置放置到中间位置
getHano(n - 1,start,end,between);
//将倒数第二个放置到目标位置
System.out.println("将" + n + "从" + start + "放置到" + end);
//将中间位置的移动到目标位置
getHano(n - 1,between,start,end);
}
}
public static void main(String[] args) {
getHano(3,"A","B","C");
}
}
结果: