zoukankan      html  css  js  c++  java
  • 第十五章 代码复用与函数递归

    代码复用与模块化设计

    代码复用:把代码当成资源进行抽象

    1、代码资源化:程序代码是一种用来表达计算的“资源”

    2、代码抽象化:使用函数等方法对代码赋予更高级别的定义

    3、代码复用:同一份代码在需要时可以被重复使用

    代码复用:函数和对象是代码复用的两种主要形式

    函数:将代码命名在代码层面建立了初步抽象

    对象:属性和方法<a>.<b>和<a>.<b>()在函数之上再次组织进行抽象

    模块化设计:分而治之

    1、通过函数或对象封装将程序划分为模块及模块间的表达

    2、具体包括:主函数、子函数、子程序之间的关系

    3、分而治之:一种分而治之、分层抽象、体系化的设计思想

    模块化设计:

    紧耦合  松耦合 

    紧耦合:两个部分之间交流很多,无法独立存在

    松耦合:两个部分之间交流较少,可以独立存在

    模块内部紧耦合、模块之间松耦合

    递归的定义:函数定义中调用函数自身的方式

    递归的关键特征:

    链条:计算过程存在递归链条

    基例:存在一个或多个不需要再次递归的基例

    类似于数学归纳法:

    what is 数学归纳法呐?

    数学归纳法:

    1、证明当n取第一个值n0时命题成立

    2、假设当nk时命题成立,证明当nk=nk+1时命题也成立

    递归思想也是数学归纳法思维的编程体现

    递归的实现:

    函数+分支语句

    1、递归本身是一个函数,需要函数定义方式描述

    2、函数内部,采用分支语句对输入参数进行判断

    3、基例和链条,分别编写对应的代码

    实例一:阶乘

    1 def fact(n):
    2     if n==0:
    3         return 1
    4     else:
    5         return n*fact(n-1)

    实例二:字符串反转

    将字符串s反转后输出>>>s[::-1]

    1 def rvs(s):
    2     
    3 if s=="":
    4     return s
    5 else:
    6     return rvs(s[1:])+s[0]

    实例三:斐波那契数列:

    1 def f(n):
    2     if n==1 or n==2:
    3         return 1
    4     else:
    5         return f(n-1)+f(n-2)

    实例四:汉诺塔

    count=0
    def hanoi(n,src,dst,mid):
        global count
        if n==1:
            print("{}:{}->{}".format(1,src,dst))
            count+=1
        else:
            hanoi(n-1,src,mid,dst)
            print("{}:{}->{}".format(n,src,dst))
            count+=1
            hanoi(n-1,mid,dst,src)
    hanoi(3,"A","C","B")
    print(count)

    运行结果如下图所示:

  • 相关阅读:
    001 :PCL 的基本文件类型PCD的读入和写入操作
    CMake +Vs2017+快速搭建pcl1.9.1环境
    Window 10 PCL-1.91+VS2017 源码编译以及安装pcl
    Eigen3+Cmake+Vs2017源码编译
    将Opencv加入到环境变量中
    004 :opencv 中矩阵操作以及通过内存的方式取像素
    ubuntu16.04与win10双系统安装 无法将grub-efi-amd64-signed 软件包安装到/target/中
    简单了解一下PyTest-sq
    软件测试工程师笔试题
    TT-反射-对象拷贝
  • 原文地址:https://www.cnblogs.com/chy8/p/9456320.html
Copyright © 2011-2022 走看看