zoukankan      html  css  js  c++  java
  • python_递归_斐波那契

    什么是递归算法?

      -- 函数自己调用自己本身

      -- 本质上return返回的时候,总是把一个参数传入到自己函数本身,让函数反复调用下去

    递归有何特点?

      -- 必有一个结束条件

        没有结束条件,递归就没有任何意义,python中默认只能999层递归

        递归过多栈溢出,报错

      -- 效率不高

        相对而言,对于正向递归,递归次数和循环次数一致,没有区别

        对于逆向递归,要递归到最后才能得到确定的值,然后从最底层返回

        一次是递归到结束值,一次从结束值返回到初始值

      -- 

    如何正向递归实现斐波那契数列?

    #!/usr/bin/python3
    
    __author__ = 'beimenchuixue'
    __blog__ = 'http://www.cnblogs.com/2bjiujiu/'
    
    list_fab = [1, 1]            # 定义接收值的列表
    
    
    def fab(u, n_1, n_2):        # u表示获取几个fab值
        n_3 = n_1 + n_2          # n_3 每次都等于前面两个数之和
        print(n_1, n_2, n_3)     # 打印每次递归这3个值
        list_fab.append(n_3)     # 把每次递归得到的n_3值添加列表中
        if u == 1:               # 设置结束条件,把列表返回回去,本质上也是递归深度
            return n_3           # 返回最后一个值
        return fab(u-1, n_2, n_3)     # 本质上还是实现了往后移一位,递归深度为u
    
    if __name__ == '__main__':
        result = fab(10, 1, 1)           # 传入初始值
        print(result)                    # 本质上就包含初始值1,1 ,list_fab中有u+2个值,但是添加进去只有u个值
        print(list_fab)                  # 打印结果

    如何逆向递归实现斐波那契数列?

    #!/usr/bin/python3
    
    __author__ = 'beimenchuixue'
    __blog__ = 'http://www.cnblogs.com/2bjiujiu/'
    
    list_fab = []                   # 定义接收值的列表
    
    
    def fab(n_3, n_2):
        n_1 = n_3 - n_2             # n_1 每次都等于 n_3 - n_2
        print(n_1, n_2, n_3)        # 打印每次递归这3个值
        list_fab.insert(0, n_1)     # 把每次递归得到的n_1值添加列表中最前面
        if n_1 == 1:                # 设置递归结束返回条件
            return 1                # 返回最后一个值
        return fab(n_2, n_1)        # 本质上实现了 n_2 = n_3 , n_1 = n_2,逆向移动了一位
    
    if __name__ == '__main__':
        result = fab(144, 89)           # 传入初始值
        print(result)                   # 打印递归最后返回的参数
        print(list_fab)
    

      

  • 相关阅读:
    小结
    day17——其他内置函数
    day16——函数式编程和内置函数
    Python中的函数
    Python字符串的两种方式——百分号方式,format的方式
    第一章 初识Mysql
    day13 Python数据基本类型
    day14 集合与函数
    第七章 线性回归预测模型
    json-lib(ezmorph)、gson、flexJson、fastjson、jackson对比,实现java转json,json转java
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/6686063.html
Copyright © 2011-2022 走看看