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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_临渔_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值