青蛙跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
递归:
递归的思想是自顶向下来解决问题的,就是比如青蛙跳了3级台阶,那么青蛙之前只能是两种情况,一是3-1=2在第二台阶跳上来的,二是3-2=1在第一台阶跳上来的,所以设青蛙跳法的函数为f(x)那么,这个函数可以看作是 f(x)=f(x-1)+f(x-2);
然后只需要计算这个函数最开始的两个值就可以完美的解决,可以是f(1)和f(2)即f(1)=1, f(2)=2;或者是f(1)和f(0)(这里要注意,因为f(0)这个数没有什么意义,因为青蛙都没跳,不过设为0的话可能会影响结果,比如在图下我如果把函数改为targe<2的话,那么最终递归到的数总会是f(0)和f(1),这时f(0)对总体来说就起到决定性因数了,如果要那样写的话就把f(0)设置为1);
迭代:
迭代是自底向上的,算法效率比较高,可以通过斐波那契数列来了解思路,即0,1,1,2,3,5,8.....
青蛙的跳的台阶和跳的情况数是:
台阶数 | 跳法数 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 5 |
对应了斐波那契数列的第三位开始,这里设置的是从0,1开始计算,如果是1的话就两数都向前移动一位就得到1,1,然后这里的g代表的就是青蛙的跳法
t和g的设置不是固定的,只是代表前后,然后根据设置的值来选择哪个作为需要数,只要找到了斐波那契和青蛙跳规律的切入点就可以了