python之递归

来源:互联网 发布:阿里云 李津 编辑:程序博客网 时间:2024/06/17 17:22

递归

递归是直接或者间接调用自身算法的过程,

特点:(1)在函数或者过程中调用自身。

   (2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口。

   (3)看起来简洁,但是执行效率非常低,不建议用来设计程序

   (4)递归调用的过程中,系统为每一程的返回点,局部量等开辟了栈来存储,递归次数过多会造成栈溢出


要求

递归算法体现的“重复”一般有三个要求:

每次调用在规模上都会有所缩小,通常减半;

相邻两次重复之间有亲密的联系,前一次要为后一次做准备;

问题的规模极小时必须直接给出解答而不再进行递归调用,因此每次递归调用都是有条件的,无条件的递归将会造成死循环


实现

斐波那契数列0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,

#!/usr/bin/env python# encoding: utf-8def func(arg1,arg2,stop):    if arg1 == 0:        print arg1,arg2    arg3 = arg1 + arg2    print arg3    if arg3 < stop:        func(arg2,arg3,stop)func(0,1,610)

二分查找

#!/usr/bin/env python# encoding: utf-8def binary_search(data_source,find_n):    mid = int(len(data_source)/2)    if len(data_source) > 1:        if data_source[mid] > find_n: # data in left            print('data in left of %s '%data_source[mid])            binary_search(data_source[:mid],find_n)        elif data_source[mid] < find_n: # data in right            print('data in right of %s ' % data_source[mid])            binary_search(data_source[:mid],find_n)        else:            print('found find_s',data_source[mid])    else:        print('cannot find....')if __name__ == '__main__':    data = list(range(1,600,3))    print(data)    binary_search(data,400)




0 0
原创粉丝点击