zoukankan      html  css  js  c++  java
  • Python中的函数递归思想,以及对比迭代和递归解决Fibonacci数列

    什么是递归?简单的说就是:函数自身调用自身。

    “普通程序员用迭代,天才程序员用递归”

    虽然递归 在运行时会不断出栈压栈,调用底层的寄存器,造成空间上的占用以及时间上的缓慢,

    但在一些算法上面仍然是递归很实用

    但需要注意的是:

    #递归是自己调用自己 很消耗时间,还会有消耗空间的危险,所以递归递归一定要知道“归去来兮”

    #所谓“归去来兮”就是指递归的两个原则:
    #1.调用了函数自身
    #2.设置了自身正确的返回值 (必须有一个正确的返回停止条件,不能无限下去)

    举简单的例子

    下面是用迭代和递归实现的阶乘的对比:

    #用循环函数实现阶乘:
    def factorial(n):
        for i in range(1,n):
            n *= i
        return n
    
    #递归版本的阶乘实现:
    def factorial(n):
        if n == 1:
            return 1
        else:
            return n * factorial(n-1)

    下面是用迭代和递归实现的Fibonacci数列的对比:

    # Fibonacci 数列的递归实现:
     
     #1.用迭代的方式实现
    def Fibonacci(n):
        n1 = 1
        n2 = 1
        n3 = 2
        if n < 0:
            return -1
            print('Error,please enter a correct month...')
        elif n == 1:
            return n1
        elif n == 2:
            return n2
        else:
            for i in range(3,n+1):
                n3 = n2 + n1
                n1 = n2
                n2 = n3
            return n3
    
     #2.用递归的方式实现
    def fab(n):
        if n < 1:
            print('输入有误...')
            return -1
        elif n == 1 or n == 2:
            return 1
        else:
            return fab(n-1) + fab(n-2)
        
  • 相关阅读:
    AS3入门教程3流程控制
    C#里面的datagridview的使用
    .NET 2.0 WinForm Control DataGridView 数据绑定
    FLASH实用代码大全
    C#中回滚SQL语句
    AS3工程中的Loading的应用
    AS3类库资源大集合
    Flash(FLV)视频播放器开源代码大集合
    一位高手整理的IIS FAQ
    Flash ActionScript 3编程的总结
  • 原文地址:https://www.cnblogs.com/jeavenwong/p/6896576.html
Copyright © 2011-2022 走看看