美文网首页
第三讲 递归(2)——练习1:打印尺子

第三讲 递归(2)——练习1:打印尺子

作者: 天涯海角之路 | 来源:发表于2020-05-30 12:21 被阅读0次

练习1:打印尺子

题目要求

1

1 2 1

1 2 1 3 1 2 1

1 2 1 3 1 2 1 4 1 2 1 3 1 2 1

分析

f(n+1)的执行结果由f(n)的执行结果构成,且构成方式与n无关。实现递归在于实现这个构成方式。

代码

#O(2^n)
def ruler_bad(n):
    assert(n>=0)
    if (n==1):
        return "1"
    return ruler(n-1) + " " + str(n) + " " + ruler(n-1)

#O(n)
def ruler(n):
    assert(n>=0)
    if (n==1):
        return "1"
    t = ruler(n-1)
    return t + " " + str(n) + " " + t

def ruler2(n):
    result = ""
    for i in range(1, n+1):
        result = result + str(i) + " " + result
    return result

分析

  1. 第一个代码的时间复杂度是O(2^n),它不会保存ruler(n-1)的运算结果,所以需要重复计算。
  2. 第三种代码用循环实现,循环内部有f(n)=g(f(n)),这样的循环可以用递归形式实现。

Tips

相关文章

  • 第三讲 递归(2)——练习1:打印尺子

    练习1:打印尺子 题目要求 1 1 2 1 1 2 1 3 1 2 1 1 2 1 3 1 2 1 4 1 2 1...

  • 九九乘法表

    1.for循环打印九九乘法表 2.递归打印九九乘法表 打印结果 11=112=2 22=413=3 23=6 33...

  • 数组

    1.递归求和: 2.for循环打印二维数组: 3.用递归判断数组是否递增: 结束条件:数组长度为1,返回true;...

  • week02斐波那契数列

    1.用循环打印出斐波那契数列。 2.用递归打印出斐波那契对应的数字。 用循环制作 用递归制作 第一版:重复计算版 ...

  • (7)列表相关题目

    (1)从头到尾打印链表算法思路:1、递归;2、借助栈;代码见:https://github.com/yuanfuq...

  • (6)链表相关题目

    (1)从尾到头打印链表 算法思路:(1)递归(2)借助栈(剑指offer6题) (2)O(1)时间内删...

  • 总结递归回溯算法

    概念: 简单的说,递归就是方法自己调用自己,每次调用时都传入不同的变量。 递归的调用机制 1.打印问题 2.阶层问...

  • JavaScript循环小练习

    for循环 1、练习一 打印1-100之间所有奇数之和 2、练习二 打印1-100之间所有7的倍数的个数及总和 3...

  • 面试题【Day16】

    递归算法 1,简单练习 1,求1-100的和 2,求1 3 5 7 9奇数的和 3,求第n项的和 斐波那契数列 (...

  • 第三讲 递归(1)

    递归函数是一种自我调用的函数 Python的递归上限是1000左右,太深的递归会报错 f(n+1)的执行结果会用到...

网友评论

      本文标题:第三讲 递归(2)——练习1:打印尺子

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