求第n个斐波那契数列
public class Recursion {
static int Fibonacci(int n) {
if (n == 0)
return 0;
if (n == 1)
return 1;
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
public static void main(String[] args) {
int n = new Scanner(System.in).nextInt();
System.out.println(Fibonacci(n));
}
}
汉诺塔
public class Recursion {
static void Hanoi(int n, String source, String temp, String target) {
if (n == 1) {
System.out.println("把第" + 1 + "盘子从" + source + "移动到" + target);
} else {
Hanoi(n - 1, source, target, temp);
System.out.println("把第" + n + "盘子从" + source + "移动到" + target);
Hanoi(n - 1, temp, source, target);
}
}
public static void main(String[] args) {
int n = new Scanner(System.in).nextInt();
Hanoi(3, "A", "B", "C");
}
}
n的阶乘
public class Recursion {
static int Factorial(int n) {
if (n == 1)
return 1;
return n * Factorial(n - 1);
}
public static void main(String[] args) {
int n = new Scanner(System.in).nextInt();
System.out.println(Factorial(n));
}
}
青蛙跳台阶
分析:
当n=1,有一种跳法
当n=2,一次跳一个跳两次,一次跳两个跳一次, 共两种跳法
当n>=2时,n个台阶,设有F(n)种跳法
(1)若第一次选择跳1个台阶,那么剩下的n-1个台阶有F(n-1)种跳法
(2)若第一次选中跳2个台阶,那么剩下的n-2个台阶有F(n-2)种跳法
所以当有n个台阶时 F(n) = F(n-1)+F(n-2)种跳法。
此问题可以归结为斐波那契数列问题(需要注意的是斐波那契数列的第二项是1,此问题当n=2时是2)
import java.util.Scanner;
public class 青蛙跳台阶递归法 {
public static int Skip_step(int target) {
if (target == 1 || target == 2) {
return target;
} else {
return Skip_step(target - 1) + Skip_step(target - 2);
}
}
public static void main(String[] args) {
System.out.println("请输入台阶数:");
Scanner s = new Scanner(System.in);
int n = s.nextInt();
double startTime = System.currentTimeMillis();
System.out.println("一共有" + (Skip_step(n)) + "种跳法");
double endTime = System.currentTimeMillis();
System.out.println("运行时间:" + (endTime - startTime) + "ms");
}
}