zoukankan      html  css  js  c++  java
  • 递归函数

    一、递归函数

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

           特性:

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

      注意:

      使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(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)
    

      

  • 相关阅读:
    smarty的学习
    用接口实现封装的一个mysqli工具类
    centos7/8安装java和mysql
    Mysql 8.0 忘记密码报错1045办法,skip-grant-tables不管用
    卸载vivo手机自带的应用程序
    DevOps的学习(一)
    quartzy的spring注入问题
    html加载执行的顺序
    关于时间Date转换成long类型的方法(时间戳的转换)
    系统中出现乱码
  • 原文地址:https://www.cnblogs.com/bigberg/p/8134777.html
Copyright © 2011-2022 走看看