【JAVA】递归经典例题

求第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");
	}
}

你可能感兴趣的:(【JAVA】递归经典例题)