剑指offer青蛙跳台阶问题

(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。
567993-20160316202248381-1919243792.png
//递归方式 
 
     
  1. public static int f(int n) {
  2. //参数合法性验证
  3. if (n < 1) {
  4. System.out.println("参数必须大于1!");
  5. System.exit(-1);
  6. }
  7. if (n == 1 || n == 2) return 1;
  8. else return f(n - 1) + f(n - 2);
  9. }


//非递归方式 
 
    
  1. public static int fx(int n) {
  2. //参数合法性验证
  3. if (n < 1) {
  4. System.out.println("参数必须大于1!");
  5. System.exit(-1);
  6. }
  7. //n为1或2时候直接返回值
  8. if (n< 2) return 1;
  9. //n>2时候循环求值
  10. int res = 0;
  11. int a = 1;
  12. int b = 1;
  13. for (int i = 2; i <= n; i++) {
  14. res = a + b;
  15. a = b;
  16. b = res;
  17. }
  18. return res;
  19. }

(2)一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个n级的台阶总共有多少种跳法?

       当n = 1 时, 只有一种跳法,即1阶跳:Fib(1) = 1;

       当n = 2 时, 有两种跳的方式,一阶跳和二阶跳:Fib(2) = Fib(1) + Fib(0) = 2;

       当n = 3 时,有三种跳的方式,第一次跳出一阶后,后面还有Fib(3-1)中跳法; 第一次跳出二阶后,后面还有Fib(3-2)中跳法;第一次跳出三阶后,后面还有Fib(3-3)中跳法

        Fib(3) = Fib(2) + Fib(1)+Fib(0)=4;

       当n = n 时,共有n种跳的方式,第一次跳出一阶后,后面还有Fib(n-1)中跳法; 第一次跳出二阶后,后面还有Fib(n-2)中跳法..........................第一次跳出n阶后, 后面还有                Fib(n-n)中跳法.

       Fib(n) = Fib(n-1)+Fib(n-2)+Fib(n-3)+..........+Fib(n-n)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-1)

      又因为Fib(n-1)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-2)

      两式相减得:Fib(n)-Fib(n-1)=Fib(n-1)         =====》  Fib(n) = 2*Fib(n-1)     n >= 2

 递归等式如下:

  567993-20160316202248803-1552137444.gif
     
 
    
  1. if(number<2)return 1;
  2. //n>2时候循环求值
  3. int res = 0;
  4. int a = 1;
  5. for (int i = 2; i <= number; i++) {
  6. res = 2*a;
  7. a= res;
  8. }
  9. return res;





转载于:https://www.cnblogs.com/zhxshseu/p/5284975.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值