首页 > 技术文章 > 递归函数

bigberg 2017-12-28 11:26 原文

一、递归函数

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

       特性:

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

  注意:

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

  

 

推荐阅读