python-递归函数
递归,就是在运行的过程中调用自己。
递归必须要有三个要素:
①、边界条件
②、递归前进段
③、递归返回段
当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
递归经典的题目求解:
n的阶层问题的求解:
def recursive_func(num):
"""
计算num的阶层:num*(num-1)*(num-2)....
:param num: 输入一个数字
:return:返回递归计算后的值
"""
if num == 1:
return 1
elif num <= 0:
print("输入错误")
else:
return num * recursive_func(num-1)
res = recursive_func(0)
print(res)
怎么样不要用递归去实现。。
def recursive_func_1(num):
"""
不采用递归的方式进行计算num的阶层
:param num: 一个数字
:return: 返回递归的计算后的值
"""
res = 1
if num <= 0:
print("输入错误")
for i in range(1, num + 1):
res *= i
return res
res = recursive_func_1(5) # 5 * 4 * 3 * 2 * 1
print(res) # 120
实现n个斐波那契数列
# 递归方式:
def fibonacci_sequence(n):
"""
实现n个斐波那契数列
:param n: 数字
:return: 返回斐波那契数
"""
if n == 1:
return 1
elif n == 2:
return 1
else:
return fibonacci_sequence(n-1) + fibonacci_sequence(n-2)
ret = fibonacci_sequence(10)
res = [fibonacci_sequence(i) for i in range(1,10)] # [1, 1, 2, 3, 5, 8, 13, 21, 34]
print(res)
# 不是递归的方法
def fibonacci_sequence_1(n):
"""
计算n个斐波那契数列:
:param n: 数字
:return: 放回斐波那契数:
"""
res = [1, 1]
while n > 0:
res.append(res[-1]+res[-2])
n -= 1
return res
ret = fibonacci_sequence_1(10)
print(ret) # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]