zoukankan      html  css  js  c++  java
  • python

    递归在需要重复操作且操作范围呈规律性变化时可以很方便帮我们解决问题

    递归的特点:
      1、递归就是在函数中调用自身
      2、在使用递归时,必须有一个明确的结束条件,成为递归出口
      3、递归算法通常显的很简洁,但是效率较低,所以一般不提倡用递归算法设计程序
      4、在递归调用的过程中,系统为每一层的返回点、局部变量等开辟了栈来存储,递归次数过多容易造成栈溢出等

    使用递归的要求:
      1、每次相对前一次复杂度(一般是操作范围)都有所减小(通常是减半)
      2、相邻两次重复之间有密切关系,前一次要为后一次做准备(通常是前一次的输出作为后一次的输入)
      3、在问题复杂度极小时,要给出确切的解答(递归结束条件),进而不再进行递归调用

    看下面例子:

    1 def calc(n):
    2     print(n)
    3     if n/2 >1:
    4         res = calc(n/2)
    5         print("看我何时打印以及打印次数:",res)
    6     print("看n的值的变化:",n)
    7     return n
    8 
    9 calc(20)
    20
    10.0
    5.0
    2.5
    1.25
    看n的值的变化: 1.25
    看我何时打印以及打印次数: 1.25
    看n的值的变化: 2.5
    看我何时打印以及打印次数: 2.5
    看n的值的变化: 5.0
    看我何时打印以及打印次数:  5.0
    看n的值的变化: 10.0
    看我何时打印以及打印次数: 10.0
    看n的值的变化: 20

    根据上面的结果可以看出递归执行时的顺序

    用递归算法实现斐波那契数列:

      菲波那切数列原理:数列中(n>=3)后一个数等于前两个数的和

     1 >>> 
     2 >>> def get_fbnq(arg1,arg2,stop):
     3     '''打印菲波那切数列片段,上限为stop'''
     4     if arg1 == 0:
     5         print(arg1,arg2)
     6     arg3 = arg1 + arg2
     7     if arg3 < stop:
     8         print(arg3)
     9         get_fbnq(arg2,arg3,stop)
    10 
    11         
    12 >>> get_fbnq(0,1,600)
    13 0 1
    14 1
    15 2
    16 3
    17 5
    18 8
    19 13
    20 21
    21 34
    22 55
    23 89
    24 144
    25 233
    26 377
    27 >>> 
  • 相关阅读:
    稠密光流
    分水岭分割
    Haar小波分析
    内积空间
    矩阵LU分解
    opencv笔记---contours
    Deformable Templates For Eye Detection
    最小二乘法
    字符集及编码
    层次聚类
  • 原文地址:https://www.cnblogs.com/xtsec/p/6682938.html
Copyright © 2011-2022 走看看