定义:自己调用自己的函数
一般规律: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) # 这只是理论的递归深度,实际的和电脑的性能有关