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]

posted @ 2019-08-04 21:20  yangchangjie  阅读(226)  评论(0编辑  收藏  举报