面试题:变态青蛙跳Java实现

变态青蛙跳问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级台阶,求该青蛙跳上一个n级的台阶总共有多少种跳法?
规律(为了表示方便,我们将一次性跳完的情况设为f(0)):
到达1阶台阶只有1种可能:f(1)=1
到达2阶台阶有2种可能:f(2)=2 
要到达3阶台阶,可以在1阶起跳,也可以在2阶起跳,所以只需要到达1阶台阶的可能情况+到达2阶的可能情况+f(0):
f(3)=f(2)+f(1)+1 
同理到达n阶台阶,可以跳完n阶的情况分别是:一次跳完f(0),先跳一步f(1),后面还有f(n-1)种跳法;或者先跳两步f(2),后面还有f(n-2)种跳法。依次类推,第一次跳出n阶后,后面还有 f(n-n)中跳法,可以得出:
f(n) = f(n-1)+f(n-2)+f(n-3)+…+f(0) 
由递推关系可得 f(n) = 2 * f(n-1)

// 递归实现
	private static int jumpFloor(int target) {
		if (target == 0)
			return 0;
		if (target == 1)
			return 1;
		return 2 * jumpFloor(target - 1);
	}
	
	// 非递归
	public static int jumpFrog(int target) {
		if (target == 0 || target == 1)
			return 1;
		if (target == 2)
			return 2;
		int sum = 1;
		for (int i = 1; i < target; i++) {
			sum *= 2;
		}
		return sum;
	}

	public static void main(String[] args) {
		int a = jumpFloor(5);
		System.out.println(a); //16
		int b = jumpFrog(5);
		System.out.println(b); //16
	}

发布了185 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_39309402/article/details/102609929
今日推荐