递归(斐波那契数列,汉诺塔)
在一个方法(函数)的内部调用该方法(函数)本身的编程方式.
package demo3; public class TestRecursive { public static void main(String[] args) { print(3); } private static void print(int i) { if (i > 0) { System.out.println(i); print(i - 1); } } }
斐波那契数列
//1-1-2-3-5-8-13-21-34-55-89-144-233-377-610-987-1597-2584-4181-6765
package demo3; /** * * @author ThinkPad 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda * Fibonacci) * 以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契 * 数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ * N*)在现代物理、准晶 体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 * 年起出版了以《斐波纳契数列季刊》为名的一份数学杂 志,用于专门刊载这方面的研究成果。 */ public class TestFibonacci { public static void main(String[] args) { for (int i = 1; i < 21; i++) { System.out.print(fibonacci(i)+"-"); } } private static int fibonacci(int i) { if (i == 1 || i == 2) { return 1; } else { return fibonacci(i - 1) + fibonacci(i-2); } } // public static void main(String[] args) { // int i=1; // int j=1; // int t=0; // while (i<100){ // t=i; // i=j; // j=i+t; // System.out.print(t+"-"); // } // // } // public static void main(String[] args) { // int i=1; // int j=1; // int temp; // System.out.print(i+"-"+j+"-"); // for (int k = 0; k < 10; k++) { // temp=i; // i=j; // j=temp+j; // System.out.print(j+"-"); // } // } }
汉诺塔问题
http://www.4399.com/flash/109504_1.htm
https://baike.baidu.com/item/%E6%B1%89%E8%AF%BA%E5%A1%94/3468295?fr=aladdin
package demo3; public class TestHanoi { private static int i = 0; public static void main(String[] args) { // for (int j = 1; j < 4; j++) { int j = 5; i = 0; hanoi(j, 'A', 'B', 'C'); System.out.println("---" + j + "个盘子至少需要" + i + "步-------"); // } } /** * * param j 第几个盘子 * * @param from 开始位置 * @param in 中间位置 * @param to 目标位置 无论有多少个盘子我们都认为上面的所有盘子是一个,最下面的是一个 */ private static void hanoi(int j, char from, char in, char to) { if (j == 1) { i++; System.out.println(i + ":把第" + j + "个盘子从" + from + "移动到" + to + "盘子"); } else { // 移动上面所有盘子到中间 hanoi(j - 1, from, to, in); // 把最下边的盘子挪到最后 i++; System.out.println(i + ":把第" + j + "个盘子从" + from + "移动到" + to + "盘子"); // 把中间的盘子挪到最后 hanoi(j - 1, in, from, to); } } }
古之善为士者,微妙玄通,深不可识

浙公网安备 33010602011771号