登楼梯——递归设计

登楼梯——递归设计

楼梯有n阶,小白一次可以上1阶,2阶或者3阶,实现一个方法,计算有多少种走完楼梯的方式。

首先定义函数int f(int n)的宏观语义是返回小白走完n阶台阶的方式数。

其次寻找出规模更小的子问题。尝试逆向思考,假设小白已经到达第n阶台阶上。那么小白上一步所在的位置在哪?因为小白可以踏出三种步伐,所以小白到达第n阶台阶时的上一位置的情况如下图所示,共三种。
在这里插入图片描述
事实上,到这一步规模更小的子问题已经显现出来了。即f(n) = f(n - 1) + f(n - 2) + f(n - 3)
最后注意递归终止条件即可完成递归函数设计。

import java.util.Scanner;

/*
 * 楼梯有n阶,小白一次可以上1阶,2阶或者3阶,实现一个方法,计算有多少种走完楼梯的方式。
 */
public class 上楼梯 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		System.out.println(f(n));
	}

	// 返回登上n阶台阶的方式数
	private static int f(int n) {
		if (n == 1) {
			return 1;
		}
		if (n == 2) {
			return 2;
		}
		if (n == 3) {
			return 4;
		}
		return f(n - 1) + f(n - 2) + f(n - 3);
	}

}

时间复杂度很大:O(3^n)

猜你喜欢

转载自blog.csdn.net/a739260008/article/details/86420813