python 递归函数

定义:自己调用自己的函数

一般规律:if语句,return

优点:代码简介

缺点:占用内存

# 阶乘


def sb(n):
    if n == 1:
        return 1
    else:
        return n*sb(n-1)


print(sb(4))
# 斐波那契数列 F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
# 1、1、2、3、5、8、13、21、34、……
def sb(n):
    if n == 1 or n == 2:
        return 1
    elif n >= 3:
        return sb(n-1) + sb(n-2)


ret = sb(9)
print(ret)
# 二分法查找
# li = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 35, 41, 42, 43, 55, 56, 66, 67, 69, 72, 76, 82, 83, 88]


def sb(_list, _value, _start=0, _end=None):
    _end = len(_list) if _end is None else _end
    if _end <= _start:
        mid = _start + (_end - _start) // 2
        if _list[mid] > _value:
            return sb(_list, _value, _start=_start, _end=mid-1)
        elif _list[mid] < _value:
            return sb(_list, _value, _start=mid+1, _end=_end)
        else:
            return mid
    else:
        return '没有此值'


li = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 35, 41, 42, 43, 55, 56, 66, 67, 69, 72, 76, 82, 83, 88]
print(sb(li, 33))

PS:递归深度不超过1000(998或997)

# 修改递归深度
import sys
sys.setrecursionlimit(1000)     # 这只是理论的递归深度,实际的和电脑的性能有关

 

posted @ 2019-05-15 23:24  市丸银  阅读(100)  评论(0编辑  收藏  举报