递归算法的简单实例

一、什么是递归  (递归 百度百科

    程序调用自身的编程技巧称为递归(recursion)。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算。

二、如何使用递归解决问题

    可以使用数学归纳法的思想来应用递归解决问题。

    数学归纳法  (数学归纳法 百度百科

    最简单和常见的数学归纳法是证明当n等于任意一个自然数时某命题成立。证明分下面两步:

  1. 证明当n= 1时命题成立。

  2. 假设n=m时命题成立,那么可以推导出在n=m+1时命题也成立。(m代表任意自然数)

三、实例

1.问题:如何判断一个数是否为2的n次方?

    数学归纳法分析:

        1.如果数为1,则成立。

        2.如果数m>1成立时,m/2也成立。

    实现代码:

def fun(n):
    assert n > 0 and type(n) is int
    if n == 1:
        return True
    return n % 2 == 0 and fun(n // 2)

2.问题:递归实现斐波那契数列

    实现代码:

def fun(n):
    assert n > 0 and type(n) is int
    if n <= 2:
        return 1
    return fun(n-1) + fun(n-2)

3.问题:假设10个球,每个球有黑白2色,用递归遍历所有情况

    实现代码:

def fun(n=10):
    if n == 1:
        return ['黑', '白']
    left, right = fun(n//2), fun(n-n//2)
    return [i+j for i in left for j in right]

4.问题:删除字符串左右两端的空格

    实现代码:

def fun(s):
    if s[0] != ' ' and s[-1] != ' ':
        return s
    elif s[0] == ' ':
        return fun(s[1:])
    return fun(s[:-1])

5.问题:求一个数组的最大最小值

    实现代码:

def fun(L):
    assert type(L) is list and len(L)>0
    if len(L) <= 2:
        if L[0] > L[-1]:
            return L[0], L[-1]
        return L[-1], L[0]
    half = len(L) // 2
    left, right = fun(L[:half]), fun(L[half:])
    Max = left[0] if left[0] > right[0] else right[0]
    Min = left[1] if left[1] < right[1] else right[1]
    return Max, Min

最后、实例暂且更新到这里,后期会持续补充,希望对大家有一些帮助

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值