python基础(20)递归

递归函数就是自己调用自己

也因此编写这样的函数时很容易出错,进而导致无限循环。

编写递归函数时,必须告诉它何时停止递归。正因为如此,每个递归函数都有两部分:基线条件(base case)递归条件(recursive case)

递归条件指的是函数调用自己,而基线条件则指的是函数什么条件下不再调用自己,从而避免形成无限循环

>>> def func(x):
	x += 1
	print(x)
	func(x)
	
>>> func(0)
# 这是一个没有终止条件的递归,x代表调用的次数,理论上最大1000层
>>> import sys
>>> sys.setrecursionlimit(100)
# 改变递归调用层数

来写一个斐波那契数列

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368

从第三个数开始,每一个数都是前面两个数的和

>>> def fib(nums):
	if nums <=2:
		return 1
	return fib(nums-1) + fib(nums-2)
>>> fib(5)
5
>>> fib(8)
21
>>> fib(34)
5702887

>>> [fib(i) for i in range(1,5)]
[1, 1, 2, 3]
>>> [fib(i) for i in range(1,8)]
[1, 1, 2, 3, 5, 8, 13]

经典快速排序

>>> def quicksocrt(array):
	if len(array) < 2:
		return array # 基线条件
	pivot = array[0] # 选择基准值
	less = [i for i in array[1:] if i <= pivot] # 由小于基准值所有元素组成的小数组
	greater = [i for i in array[1:] if i > pivot] # 由大于基准值所有元素组成的小数组
	return quicksocrt(less) + [pivot] + quicksocrt(greater)

>>> quicksocrt([2,3,23,1,8,4,9,33,5,22,7])
[1, 2, 3, 4, 5, 7, 8, 9, 22, 23, 33]
posted @ 2021-11-03 00:03  下个ID见  阅读(29)  评论(0)    收藏  举报