递归 基于python (1)

在看回溯的方法,重新回去看了眼递归

真是一入递归深似海。。。

递归是一个函数不断调用自己的过程,这个过程包括递 和 归 ,递就是调用自身的过程,归就是程序出口,如果一个递归没有出口,就意味着这个函数会一直调用自己,最后会导致递归超过深度,产生崩溃

下面用递归实现阶乘方法

def f(i):   # 阶乘函数
    if i == 0:
        return 1  # 递归出口, 因为数学规定上0! = 1 所以定义这个递归出口是合理的
    return i * f(i-1)   # 递的过程,调用自身



f(5) # 120

同样用递归实现一个累加函数

def sum(i): # 从0累加到i
    if i == 0:
        return 0   # 递归出口
    return i + sum(i-1)


sum(3)  # 6
    

实际上在写递归的时候,需要明确自己的函数实现的是什么目的同时明确边界条件,也就是递归出口,这样在实现递归的时候就不会出错,可以抽象成高中数学中的数学归纳法,边界条件就是n=1 时成立的等式,不断使得 1 + 1+ 1 +1+。。。最后到达n,实际上这个过程就是就是递归中递的过程,而n=1 成立的条件就是递归中的归,也就是出口

下面用递归解决斐波那契数列问题

递推公式如下:f[n] = f[n-1] + f[n-2] , f[1] = f[2] = 1

def fib(i):
    if i == 1:
        return 1
    if i == 2:
        return 1
    return fib(i-1) + fib(i-2)

好的接下来已经学会递归了,下面尝试一些解决回溯问题吧T^T

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值