zoukankan      html  css  js  c++  java
  • 递归(Recursion)

      递归是一种非常常用的算法,分为“递”和“归”两个步骤。满足递归算法有三个条件:1.一个问题,可以分解为子问题;2.该问题,与分解后的子问题,解决思路一致;3.存在终止条件。案例演示:假设有n个台阶,每次可以跨1个台阶,或者2个台阶。问:走完这n个台阶共有多少中走法?

      解答思路:根据第一步的走法,可以分为两类

      1.第一步走1个台阶

      2.第一步走2个台阶

      3.则n个台阶的走法,等于第一步先走1个台阶后,n-1个台阶的走法;加上第一步先走2个台阶后,n-2个台阶的走法

      4.用递推公式表示:f(n)=f(n-1)+f(n-2)

      5.终止条件:如果最后剩下1个台阶,则只有1种走法:if(n==1) return1;如果最后剩下2个台阶,则有2中走法:if(n==2) return 2

      代码:

      

    /**
    * 递归求解:
    * 假设有n个台阶,每次可以跨1个台阶,或者2个台阶。请问走完n个台阶共有多少种走法?
    *
    * 思路:
    * 1.根据第一步走法,分为两类:
    * 1.1.第一步走1个台阶
    * 1.2.第一步走2个台阶
    * 1.3.则n个台阶的走法,等于第一步先走1个台阶后,n-1个台阶的走法;加上先走2个台阶后,n-2个台阶的走法
    * 1.4.用公式表示:f(n)=f(n-1)+f(n-2)
    * 1.5.终止条件:
    * 1.5.1.如果最后剩下1个台阶,则只有1中走法:if(n==1) return 1
    * 1.5.2.如果最后剩下2个台阶,则有两种走法:if(n==2) return 2
    */
    public static int stepsNum(int n){
    if(n==1) return 1;
    if(n==2) return 2;

    return stepsNum(n-1)+stepsNum(n-2);
    }
    我们唯一能够控制的是自己的脾气和努力
  • 相关阅读:
    android switch控件的使用
    触摸屏校准tslib的配置文件
    matlab 函数的编写与调用
    penmount串口触摸屏加载
    FPGA保留信号的语句
    ioctl和unlock_ioctl的区别
    内核目录中增加自己的目录
    linux内核打印"BUG: scheduling while atomic
    28335外部中断
    编译QT时出现lib/libQtGui.so: undefined reference to `ts_read_raw'的解决办法
  • 原文地址:https://www.cnblogs.com/itall/p/10878824.html
Copyright © 2011-2022 走看看