- /*
- * 递归算法小结
- */
- public class DiGui_Demo {
- /*
- * f(n)= 1+2+...+n = f1(n-1) + n
- */
- public static int f1(int n) {
- if(1 == n) {
- return 1;
- } else {
- return f1(n-1) + n;
- }
- }
- /*
- * 斐波拉契序列 1, 2, 3, 5, 8, 13, 21, 34, 55 ...
- * f(n) = f(n-1) + f(n-2)
- */
- public static int f2(int n) {
- if(1 == n) {
- return 1;
- } else if(2 == n) {
- return 2;
- } else {
- return f2(n-1) + f2(n-2);
- }
- }
- /*
- * 汉诺塔 次数=2的n次方-1
- */
- public static void f3(int n, char A, char B, char C) {
- if(1 == n) {
- System.out.println("将编号为"+n+"的盘子直接从"+A+"柱子移到"+C);
- }
- else {
- f3(n-1, A, C, B);
- System.out.println("将编号为"+n+"的盘子直接从"+A+"柱子移到"+C);
- f3(n-1, B, A, C);
- }
- }
- /*
- * 题目f(n) = 1!+2!+3!...+n!
- * f(n) = f(n-1) + n!
- * f(n) = f5(n-1) + n! = f5(n-1) + f(4) = f5(n-1) + f4(n-1)*n
- */
- public static long f5(long n) {
- if(1 == n) {
- return 1;
- } else {
- return f5(n-1) + f4(n);
- }
- }
- public static long f4(long n) {
- if( 1 == n) {
- return 1;
- } else {
- return n * f4(n-1);
- }
- }
- public static void main(String[] args) {
- System.out.println(f1(100));//5050
- System.out.println(f2(7));//21
- int n = 3;char a = 'A';char b = 'B';char c = 'C';f3(n, a, b, c);//7次
- System.out.println(f5(5));//153
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/101220137879.html
来源: http://www.codesnippet.cn/detail/101220137879.html