台阶很高,青蛙跳不跳?

青蛙总是被被要求跳台阶,我想,他一定很累的!

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法?

对于这样的问题,n可大可小,如果n很小,我们可以直观暴力拆解就可以得到答案,但是如果n很大,那么这个问题就升级了。

一般处理问题,我们最直接的思路,可能就是分治,将大问题拆解为小问题,分而解决。

在此,也不例外。

首先我们知道青蛙一次能跳一级或者两级。

假定最后一跳跳一级,则剩余n-1个台阶,则问题化为解决跳上n-1个台阶的问题。

假定最后一跳跳两级,则剩余n-2个台阶,则问题化为解决跳上n-2个台阶的问题。

所以归总起来,总的可能的跳法为(n-1)个台阶和(n-2)个台阶问题的总和。

我们假定解决方案为f(n),则f(n) = f(n-1) + f(n-2) ,这里我们假定n是大于2的。

当n = 1 时,青蛙跳一级即可,f(1) = 1。

当n = 2 时,青蛙可以连跳两个一级或者跳一个两级,f(2) = 2。

观察f(n) = f(n-1) + f(n-2) 公式,你们首先想到的是什么?对的,是递归,级联求解:

public static long jump(int n) { if (n < 3) { return n; } return jump(n - 1) + jump(n - 2); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdypp.html