• 2018.10.10python学习第十六天part2


    函数递归 and 二分法

    1.什么是函数递归?(what) 函数的递归调用是函数嵌套的一种特殊形式:直接or间接的嵌套该函数本身 本质:就是一个循环的过程

    2.为何要用函数递归?(why) 在某些情况下,用函数递归来使用重复的过程,会比用while循环更简单。

    3.如何用函数递归?(how) 两个原则: 1.每次进入下一层递归,问题的规模必须有所减少 2.递归必须有一个明确的结束条件 递归又分两个明确的阶段: 1.回溯:一层一层的递归调用下去 2.递推:在某一层结束递归,然后一层一层的返回

    or

    1.递归:将问题规模为n的问题降解成若干个规模为n-1的问题,依次降解,直到问题规可

    求,求出低阶规模的解,代入高阶问题中,直至求出规模为n的问题的解。

    2.递推:构造低阶的规模(如规模为i,一般i=0)的问题,并求出解,推导出问题规模为i+1的

    问题以及解,依次推到规模为n的问题

    #调用函数本身的两种方式 #方式一:直接调用

    def f1():
    print('from f1')
    f1()

    #方式二:间接调用

    def f2():
    print('from f2)
    f1()
    def f1():
    pring('from f1')
    f2()

    #eg1.

    # age(5)=age(4)+2
    # age(4)=age(3)+2
    # age(3)=age(2)+2
    # age(2)=age(1)+2
    # age(1)=18

    # age(n)=age(n-1)+2 n>1
    # age(1)=18
    前一个人比后一个人的年龄大2岁,计算每一个人的年龄

    #方式一:

    def age(n):
    if n == 1:
    return 18
    else:
    return age(n-1)+2
    res=age(7)
    print(res)

    二分法

    是算法的一种,简而言之就是把一个很长的数列一分为二,然后和中间值对比

    但是一个大原则就是,如果是数列的话,一定要是有序数列,

    nums=[1,13,23,27,31,33,57,73,81] #从小到大的数字list
    #找到73这个数
    def binary_search(num,nums):
    if len(nums) == 0 :
    print('num not exist')
    return
    mid_index=len(nums)//2
    elif num > nums[mid_index]:
    nums=nums[mid_index:]
    binary_search(num,nums)
    elif num < nums[mid_index]:
    nums=nums[:mid_index]
    binary_search(num,nums)
    else:
    print('get it')
    binar_search(73,nums)


     

     

     

  • 相关阅读:
    第4章 栈和队列
    第3章 线性表
    第2章 算法
    第1章 数据结构绪论
    First Blood
    第52条:通过接口引用对象
    第51条:当心字符串连接的性能
    第50条:如果其他类型更合适,则尽量避免使用字符串
    第49条:基本类型优先于装箱基本类型
    第48条:如果需要精确的答案,请避免使用float和double
  • 原文地址:https://www.cnblogs.com/hello-yuanjing/p/9767669.html
Copyright © 2020-2023  润新知