zoukankan      html  css  js  c++  java
  • Python学习系列之递归函数(二十一)

    递归函数

    一、什么是递归函数

    如果在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数

    二、递归的组成部分

      递归调用与递归终止条件

    三、递归的调用过程

      1.每递归调用一次函数,都会在栈内存分配一个栈帧

      2.每执行完一次函数,都会释放相应的空间

    四、递归的优缺点

      缺点:占用内存多,效率低下

      优点:思路和代码简单

    案例:计算6的阶乘

    6的阶乘示意图:

     代码:

    def fac(n):
        if n==1:
            return 1
        else:
            res=n*fac(n-1)
            return  res
    
    print(fac(6))
    

      执行结果:

      调用debug模式,可以查看函数执行过程,可以看到,先去计算fac(n-1),不会执行到return res这一行,直到n=2,执行fac(2-1)即n=1,则会执行return 1,然后向上逐层计算n*fac(n-1),将结果保存到res,一层一层向上返回计算结果,最后返回res的结果720

     一直点击debug模式的向下箭头,能看到各层的计算结果

     

      

     五、裴波那契数列

    1. 什么是裴波那契数列

    1 1 2 3 5 8 13.... 即第1个位置上是1,第2个位置上是1,第三项是前两项之和即2,第四项是3=1+2,以此类推

    2. 代码示例

    '''裴波那契数列'''
    def fib(n):
        if n==1:
            return 1
        elif n==2:
            return 1
        else:
            return fib(n-1)+fib(n-2)
    
    #求裴波那契数列第6位上的数字
    print(fib(6))
    

      执行结果:

      如果要一次输出裴波那契数列的前面6位数字呢?只需要使用一个for循环输入1-6的值即可,代码如下:

    def fib(n):
        if n==1:
            return 1
        elif n==2:
            return 1
        else:
            return fib(n-1)+fib(n-2)
    
    #求裴波那契数列前6位的数字
    for i in range(1,7):
        print(fib(i))
    

      执行结果:

     --------------------------------------------------

    函数总结

    1. 函数的定义与调用

      函数定义使用def定义

      函数定义的形参有:*定义个数可变的位置形参,**定义个数可变的关键字形参,定义默认值参数

      函数调用的实参:位置实参,关键字实参

      函数可以有多返回值

    2.变量的作用域

      变量由全局变量和局部变量,通过用global声明局部变量,可是局部变量变成全局变量

    3.递归函数

      递归函数就是函数本身调用本身

      递归的组成部分:调用条件和终止条件

  • 相关阅读:
    WPF快速入门系列(4)——深入解析WPF绑定
    HDU 1047 Integer Inquiry 大数相加 string解法
    uva 10452 Marcus
    PHP在浏览器上跟踪调试的方法以及使用ChromePhp、FirePHP的简介
    Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序
    TQ2440 学习笔记—— 1、Windows平台下开发工具安装与环境建立
    Android之——jni通用工具方法
    [Erlang危机](5.1.4)端口port
    uva 10765 Doves and Bombs(割顶)
    js坑爹笔试题目汇总(持续更新中)
  • 原文地址:https://www.cnblogs.com/wx170119/p/14456851.html
Copyright © 2011-2022 走看看