递归其实很简单

递归其实很简单

递归的思想

1. 递归主要是抓住一下几个要点 :
  • 最终的结果要能够分解成若干个子问题
  • 子问题的解法与最终结果的解法要完全相同
  • 最后要能够找到已知的初始条件(也就是可以出函数自调用的条件,这个很关键,不然就死循环啦!!!)
2. 递归的两大要素可以大致总结如下:
  • 基线条件:函数不再调用自己,也可以称为终止条件。
  • 递归条件:调用自己函数的条件,当然,不同的函数要有各自不同的算法,求和和求阶乘的算法当然不能一样啦。

这里举一个使用递归的累加求和的例子来理解一下基线和递归条件

def sum(x):
    """1x累加求和"""
    #基线条件
    if x == 1:
        return 1
    #递归条件
    else:
        return x + sum(x-1)
3.递归的语法
def 函数名(传入的参数)
    if 基线条件1
        return 基线条件1的初始值
    if 基线条件2
        return 基线条件2的初始值
    ......
    else:
        递归条件(问题的解法,调用自己)

递归的实例

就拿斐波拉契数列举个例子吧,我们都知道斐波拉契数列的形式是1,1,2,3,5,8....,规律就是后一项是前两项的和。也就是说可以写成f(n)= f(n-1) + f(n-2)的形式,相当于满足了第一个条件。而最终的结果也就是f(n)首先是可以分解成若干个解法相同的子问题的,也就是f(n-1)和f(n-2),这就满足了第二个条件。同时,我们是已知初始条件的f(1) = 1、f(2) = 1,第三个条件也有了,所以开始大胆的使用递归吧,孩儿们!!!
上代码:

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

       最后,写一点自己的感想吧!递归的优势在于可以使程序看起来更利于人们理解,虽然有的时候性能不如循环更高效。如果你想说“大哥,你上面写的啥乱七八糟的东西俺看不懂,到底啥时候能用递归啊?”或者你想说“有的时候看到别人用,倒是能看懂,自己用的时候就麻爪了,不知道从何下手该怎么整呢?”我只能说几个自己的小经验吧。首先,公式这个东西,如果你看到有能表示成f(n)的公式,那十有八九是可以用递归的。然后就是,怎么用递归的问题。你可以按照条件,先对应问题看看能不能拆解成满足条件的形式,如果可以那就放心大胆的用吧。最后我想说的是,不要怕递归,虽然有的时候自己写起来很难,多写几个就好了。加油吧,大家一起努力!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值