python学习日记(初识递归与算法)
递归函数
定义
递归的定义——在一个函数里再调用这个函数本身
递归的最大深度——997,即栈溢出。
使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
def func(n): print(n) n += 1 func(n) func(1)
import sys print(sys.setrecursionlimit(100000))
例1
比如你问张三,张三你多大了?张三说他不告诉你,但张三比李四大两岁。
你想知道张三多大,你是不是还得去问李四?李四说,我也不告诉你,但我比王五大两岁。
你又问王五,王五r也不告诉你,他说他比赵六大两岁。
那你问赵六,赵六告诉你,他10岁了。
这个时候你是不是就知道了?张三多大
赵六:10
王五:12
李四:14
张三:16
age(4) = age(3) + 2 age(3) = age(2) + 2 age(2) = age(1) + 2 age(1) = 40
如果用函数的话,怎么写呢?
def age(n): if n == 1: return 10 else: return age(n-1)+2 print(age(4))
这就实现了递归。
例二
使用递归函数实现阶乘。
def func(n): if n == 1: return 1 else: return n * func(n-1) print(func(5))
二分查找算法
务必详细看,理解每一行,谨记!
解决的问题有:返回值、end参数,索引
def fi(list,aim,start = 0,end = None): end = len(list)-1 if end is None else end mid = (end - start)//2 + start if start <= end: if list[mid] < aim: return fi(list,aim,start = mid+1,end = end) elif list[mid] > aim: return fi(list,aim,start = start,end = mid-1) else: return 'found you,aim索引:{},aim:{}'.format(mid,list[mid]) else: return aim,'不在列表中' l = [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(fi(l,3))
def search(li,a): start = 0 end = len(li)-1 found = False while start<=end and not found: mid = (end - start) // 2 if li[mid] == a: found = True else: if li[mid]>a: end = mid-1 else: start = mid+1 return found l1 = [1,2,3,4,5,6,7,8,9,10,11] print(search(l1,0))
pass
作者:Gruffalo
---------------------------------------------
天行健,君子以自强不息
地势坤,君子以厚德载物
内容仅为自己做日常记录,备忘笔记等
真小白,努力学习ing...一起加油吧!(ง •̀_•́)ง