• 递归函数


    一、递归函数

      在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

           特性:

    • 必须有一个明确的结束条件
    • 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
    • 递归函数的优点是定义简单,逻辑清晰

      注意:

      使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

    二、事例

      2.1 阶乘

    def func(n):
    
        if n == 1:
            return 1
        else:
            return n * func(n-1)
    View Code

      2.2 二分法  

    t = [i for i in range(0, 1000, 3)]
    # print(t)
    
    
    def find_num(data_list, num):
        if num in data_list:
            if len(data_list) > 1:
                mid = int(len(data_list) / 2)
                if data_list[mid] == num:
                    print('找到该数字:', data_list[mid])
                    return data_list[mid]
                elif data_list[mid] > num:
                    print('该数字在本次搜寻中间数[%d]的左边' % data_list[mid])
                    return find_num(data_list[0:mid], num)
                else:
                    print('该数字在本次搜寻中间数[%d]的右边' % data_list[mid])
                  return find_num(data_list[mid:], num)
    
            else:
                print('该数字就在列表第一位')
        else:
            print('列表中不存在该数字')
    
    if __name__ == '__main__':
        
        while True:
            n = int(input('输入你要查找的数字:'))
            find_num(t, n)
    

      

  • 相关阅读:
    机器学习知识点总结(1)
    RPC基本原理
    Oracle中ORA-01113,ORA-01110的简单解决
    跟着whatwg看一遍事件循环
    node进程间通信
    白话协程【前端视角】
    白话typescript中的【extends】和【infer】(含vue3的UnwrapRef)
    原来rollup这么简单之插件篇
    面试官: 说说你对async的理解
    白话web安全
  • 原文地址:https://www.cnblogs.com/bigberg/p/8134777.html
Copyright © 2020-2023  润新知