zoukankan      html  css  js  c++  java
  • 递归与迭代

    编程题:有n步台阶,一次只能上1步或2步,共有多少中走法

    方法一:递归

    思路

    n=1 ——> 一步 ——> f(1)=1
    n=2 ——> (1)一步一步 (2)直接两步 ——> f(2) =2
    n=3 ——> (1)先到达第f(1),然后直接从f(1)直接跨2步
    (2)先到达f(2),然后直接从f(2)跨步1 f(3)=f(1)+f(2)
    n=x ——>(1) 先到达f(x-2),然后从f(x-2)直接垮2步
    (2) 先到达f(x-1),然后从f(x-1)跨1步 f(x) =f(x-2)+f(x-1)

    代码
    	public static void main(String[] args) {
            Long start = System.currentTimeMillis();
            System.out.println(f(40l));
            Long end = System.currentTimeMillis();
            System.out.println(end-start);
        }
    
        public static Long f(Long n){
            if(n <1)
                throw new IllegalArgumentException(n +"不能小于1");
            if(n == 1 || n == 2){
                return n;
            }
            return f(n-2)+f(n-1);
        }
    
    优点:代码精简 易懂,容易编写。
    缺点:开销较大,容易造成内存溢出
    

    方法二:迭代

    思路:使用one变量存储前两步的值,使用two变量存储前一步的值
    代码
    	public static void main(String[] args) {
            Long start = System.currentTimeMillis();
            System.out.println(f(40l));
            Long end = System.currentTimeMillis();
            System.out.println(end-start);
        }
    	public static Long loop(Long n){
            if(n <1)
                throw new IllegalArgumentException(n +"不能小于1");
            if(n == 1 || n == 2){
                return n;
            }
            Long one = 1l;
            Long two = 2l;
            Long sum = 0l;
    
            for(int i = 3;i<=n;i++){
                sum = one + two;
                one = two;
                two = sum;
            }
            return sum;
        }
    
    优点:速率快。
    缺点:代码不易懂。
  • 相关阅读:
    Django DRF 分页
    django DRF理解
    Docker使用
    基于Django+FastDFS文件管理系统搭建
    django+centos+mariadb读写分离完美实现(上)-mysql主从备份实现
    Python协程理解——基于爬虫举例
    基于Python的大数据的分页模型代码
    NOIP模拟——矩阵分组
    NOIP模拟——聚会
    NOIP模拟——卡牌游戏
  • 原文地址:https://www.cnblogs.com/shaoyu/p/12418607.html
Copyright © 2011-2022 走看看