zoukankan      html  css  js  c++  java
  • day④:递归

    递归

    特点

    递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
    递归算法解决问题的特点:
    (1) 递归就是在过程或函数里调用自身。
    (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
    (3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
    (4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。

    要求

    递归算法所体现的“重复”一般有三个要求:
    一是每次调用在规模上都有所缩小(通常是减半);
    二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);
    三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。

    例子:
    1. #!/usr/bin/env python
    2. #coding=utf-8
    3. __author__ = 'yaobin'
    4. def calc(n):
    5. print(n)
    6. if n/2 >1:
    7. res=calc(n/2)
    8. print("res:",res)
    9. print("N:",n)
    10. return n
    11. calc(10)
    12. 结果:
    13. 10
    14. 5.0
    15. 2.5
    16. 1.25
    17. N: 1.25
    18. res: 1.25
    19. N: 2.5
    20. res: 2.5
    21. N: 5.0
    22. res: 5.0
    23. N: 10
    #好好看下断点吧,就懂了


    二.斐波那契
    斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368

    例子:

    1. #!/usr/bin/env python
    2. #coding=utf-8
    3. __author__ = 'yaobin'
    4. def func(arg1,arg2,stop):
    5. if arg1 == 0:
    6. print(arg1,arg2)
    7. arg3=arg1+arg2
    8. print(arg3)
    9. if arg3<30:
    10. func(arg2,arg3,stop)
    11. func(0,1,30)
    12. #结果
    13. 0 1
    14. 1
    15. 2
    16. 3
    17. 5
    18. 8
    19. 13
    20. 21
    21. 34







  • 相关阅读:
    vmware ubuntu 异常关机无法连接到网络
    Speed up GCC link
    常用的一些解压命令
    Log4j 漏洞复现
    Test Case Design method Boundary value analysis and Equivalence partitioning
    CCA (Citrix Certified Administrator) exam of “Implementing Citrix XenDesktop 4”
    What is Key Word driven Testing?
    SAP AGS面试小结
    腾讯2013终端实习生一面
    指针的引用
  • 原文地址:https://www.cnblogs.com/binhy0428/p/5170957.html
Copyright © 2011-2022 走看看