递归:
递归就是自己调用自己,无限循环下去,直到遇到终止条件(必须有,否则程序会崩溃)。
递归与循环:
递归更容易理解,也更容易出现bug;循环性能更高。
使用递归要有一个停止递归的条件,否则会一直循环下去,最后溢出。 所以每个递归函数要有两个部分:基线条件和递归条件。
基线条件:
指的是函数不再调用自己的条件,从而避免形成无限循环。
涉及list的递归,基线条件通常是list为空或只包含一个元素。
递归条件:
指函数开始调用自己的条件。
示例1:递减函数
def countDown(i):
print(i)
if i <= 0: #基线条件
return
else: #递归条件
countDown(i - 1)
countDown(10)
结果为:
10
9
8
7
6
5
4
3
2
1
0
示例2:n!阶乘函数
def fact(i):
if i == 1:
return 1
else:
return i * fact(i - 1)
print(fact(5))
结果为:
120
示例3:求和函数
def sum2(arr):
if len(arr) == 0:
return 0
else:
return arr[0] + sum2(arr[1:])
arr = [1, 3, 5, 7, 9]
print(sum2(arr))
结果为:
25
示例4:计数函数
def count2(arr):
if len(arr) == 0:
return 0
else:
return 1 + count2(arr[:-1])
arr = [1, 3, 5, 7, 9, 11, 13, 15, 17]
print(count2(arr))
结果为:
9
示例5:找最大数
def max_num(arr):
if len(arr) == 1:
return arr[0]
else:
if arr[0] > arr[1]: #获取值相等或小的索引