zoukankan      html  css  js  c++  java
  • 剑指offer青蛙跳台阶问题

    (1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。
    //递归方式 
    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

     递归等式如下:

     
         
    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;





  • 相关阅读:
    队列

    有序数组
    集合:一条规则决定性能
    基础数据结构:数组
    空间复杂度
    插入排序
    重新认识Javascript的一些误区总结
    Knockout: 使用knockout validation插件进行校验, 给未通过校验的输入框添加红色边框突出显示.
    Knockout: 使用CSS绑定和event的blur失去焦点事件, 给未通过校验的输入框添加红色边框突出显示.
  • 原文地址:https://www.cnblogs.com/zhxshseu/p/5284975.html
Copyright © 2011-2022 走看看