美文网首页这个我学过么?
学习python3的野路子——递归

学习python3的野路子——递归

作者: HerdingCat | 来源:发表于2019-03-03 21:44 被阅读0次

递归[1]:直观的感受是与归纳法相似。必须要有的两个部分:递归基、递归规则。

  • 递归基保证递归能返回结果。
  • 递归规则使得问题规模减少,即保证抵达递归基。
    某社区,对于递归的有趣讨论[2]

以下的编程题,本文作者通过建立图模型,对图采用深度优先搜索,同时做适当的剪枝解决的。由于python3对输出的限制,因此对结果做了处理。


关于具体的算法实现
# PAT中的基础编程题目集函数题7-37
def dec(x, ans, seq): # x是当前待分解的整数;ans是所有分解情况;seq是当前分解结果
    if x == 1: # 递归基
        seq.append('1')
        ans.append(seq[: ]) # copy a list
        seq.pop()
    else :
        for i in range(1, x):
            if len(seq) > 0 and int(seq[-1]) > i: # 剪枝,避免2+3+2出现
                continue
            seq.append(str(i))
            if int(seq[-1]) > x - i: # 剪枝,保证分解项递增,避免6+1出现
                seq.pop()
                continue
            dec(x - i, ans, seq)
            seq.pop()
        seq.append(str(x)) # 考虑本身也是一个分解
        ans.append(seq[: ])
        seq.pop()

n = eval(input())
ans = []
inans = cnt = 0
pattern = str(n) + '='
dec(n, ans, seq = [])

for equ in ans: # 该循环用于控制输出
    cnt += 1
    inans += 1
    inequ = 0
    for i in equ:
        if inequ:
            pattern += '+'
        pattern += i
        inequ += 1
    if cnt % 4 == 0:
        print(pattern)
        pattern = str(n) + '='
        cnt = 0
    elif inans != len(ans) :
        pattern += ';' + str(n) + '='
if cnt:
    print(pattern)

参考


  1. http://www.nowamagic.net/librarys/veda/detail/2314

  2. https://www.zhihu.com/question/20507130

相关文章

  • 学习python3的野路子——递归

    递归[1]:直观的感受是与归纳法相似。必须要有的两个部分:递归基、递归规则。 递归基保证递归能返回结果。 递归规则...

  • 学习python3的野路子——函数

    函数[1][2]由函数名,参数,函数主体,返回值构成。 定义函数:通过def关键字定义函数,def的字符串为函数名...

  • 学习python3的野路子——字典(dictionary)

    字典类似于C++中的map类型,该类型元素由两部分构成:key和value。其中的key类似于数组的下标;valu...

  • 学习python3的野路子——复数(complex)

    python3中提供复数类型[1],其创建可通过complex([real[, imag]]),当两者都缺省时,返...

  • 学习python3的野路子——分支与循环

    本文相关编程题较多。 分支[1] python3中实现分支的方式是通过if、elif、else三个关键字。 通过对...

  • 学习python3的野路子——导入模块与包

    模块与包[1] 模块与包的关系:模块可以属于包 导入模块(module)的方法:直接使用import后缀名为.py...

  • 当野路子遇见野路子

    我觉得我路子就挺野的 不过这公司用人路子更野...我投的岗位叫“新媒体运营经理” ,这个词语的意思本来是出内容、寻...

  • 野路子

    不知道在你的生活中有没有在不停地寻找问题的最优解,却忽略拿起其中的一把锤子及时上路——检验这个解法的可行性。在寻找...

  • 野路子

    野路子 不骗你,每次我出场打球,都有粉丝在一旁呐喊助威,替我加油鼓劲,有些不了解我的,张大了嘴巴,瞪直了眼睛,满是...

  • 野路子

    感觉好好工作已经没办法冲破第一宇宙速度了 所以路子要野,心也不能正常运行,怎么特别怎么来 ,哈哈 千真万确,不要用...

网友评论

    本文标题:学习python3的野路子——递归

    本文链接:https://www.haomeiwen.com/subject/pspleqtx.html