Riešenie úloh 12. cvičenia


  1. Riešenie:

    def mocnina(n, k):
        if k == 0:
            return 1
        return n * mocnina(n, k - 1)
    
    print(mocnina(2, 900) == 2 ** 900)
    

  1. Riešenie:

    def mocnina(n, k):
        if k == 0:
            return 1
        if k % 2:       # pre neparne
            return n * mocnina(n, k - 1)
        m = mocnina(n, k // 2)
        return m * m
    
    print(mocnina(2, 10000) == 2 ** 10000)
    

  1. Riešenie:

    def pom_palindrom(r):      # pomocna rekurzivna funkcia
        if len(r) <= 1:
            return True
        if r[0] != r[-1]:
            return False
        return pom_palindrom(r[1:-1])
    
    def palindrom(retazec):
        return pom_palindrom(retazec.lower().replace(' ', ''))
    
    print(palindrom('Jelenovi Pivo Nelej'))
    

  1. Riešenie:

    def nsd(a, b):
        if a == b:
            return a
        if a > b:
            return nsd(b, a)
        return nsd(a, b-a)
    
    def nsd(a, b):
        if b == 0:
            return a
        return nsd(b, a % b)
    
    print(nsd(40, 24))
    

  1. Riešenie:

    def sucet(zoznam):
        if zoznam == []:
            return 0
        if len(zoznam) == 1:
            return zoznam[0]
        stred = len(zoznam) // 2
        return sucet(zoznam[:stred]) + sucet(zoznam[stred:])
    
    print(sucet(list(range(2000))))
    

  1. Riešenie:

    def sucet2(zoznam):
        if zoznam == []:
            return 0, 0
        if len(zoznam) == 1:
            if zoznam[0] < 0:
                return zoznam[0], 0
            return 0, zoznam[0]
        stred = len(zoznam) // 2
        zap1, kla1 = sucet2(zoznam[:stred])
        zap2, kla2 = sucet2(zoznam[stred:])
        return zap1 + zap2, kla1 + kla2
    
    print(sucet2([0, 1, -2, 3, 4, -5, -6, 7]))
    print(sucet2(list(range(100)) + list(range(0, -100, -1))))
    print(sucet2([0]*1000+[1]+[0]*1000+[-1]+[0]*1000))
    

  1. Riešenie:

    import turtle
    
    def strom(d):
        t.fd(d)
        if d > 20:
            t.lt(40)
            strom(d * 0.7)
            t.rt(90)
            strom(d * 0.6)
            t.lt(50)
        else:
            zoznam.append(turtle.Turtle())
            zoznam[-1].pu()
            zoznam[-1].setpos(t.pos())
        t.fd(-d)
    
    turtle.delay(0)
    t = turtle.Turtle()
    t.speed(0)
    t.lt(90)
    t.pu()
    t.setpos(0, -200)
    t.pd()
    zoznam = []
    
    strom(150)
    
    for p in zoznam:
        p.color('green')
        p.shape('turtle')
    while True:
        for p in zoznam:
            p.lt(15)
    

  1. Riešenie:

    import turtle
    
    def kmit(a):
        if a > 230:
            t.pencolor('lightgray')
        else:
            t.fd(a)
            t.rt(170)
            t.fd(a+5)
            t.lt(170)
            kmit(a+10)
            t.rt(170)
            t.fd(-a-5)
            t.lt(170)
            t.fd(-a)
    
    t = turtle.Turtle()
    t.pu()
    t.setpos(-250, 0)
    t.pd()
    t.lt(85)
    kmit(100)
    

  1. Riešenie:

    import turtle
    
    def vpisane3(n, a):
        if n > 0:
            t.fd(a / 2)
            t.lt(60)
            vpisane3(n - 1, a / 2)
            t.rt(60)
            t.fd(a / 2)
            for i in range(2):
                t.lt(120)
                t.fd(a)
            t.lt(120)
    
    #turtle.delay(0)
    t = turtle.Turtle()
    
    vpisane3(6, 200)
    

  1. Riešenie:

    import turtle
    
    def vpisane4(n, a):
        if n > 0:
            t.fd(a / 2)
            t.lt(45)
            vpisane4(n - 1, a / 2**0.5)
            t.rt(45)
            t.fd(a / 2)
            for i in range(3):
                t.lt(90)
                t.fd(a)
            t.lt(90)
    
    #turtle.delay(0)
    t = turtle.Turtle()
    
    vpisane4(8, 200)
    

  1. Riešenie:

    import turtle
    
    def kriziky4(n, a):
        if n > 0:
            for i in range(4):
                t.fd(a)
                t.lt(45)
                kriziky4(n - 1, a / 3)
                t.rt(45)
                t.fd(-a)
                t.lt(90)
    
    turtle.delay(0)
    t = turtle.Turtle()
    t.speed(0)
    kriziky4(5, 150)
    

  1. Riešenie:

    import turtle
    
    def kriziky(n, a, pocet):
        if n > 0:
            for i in range(pocet):
                t.fd(a)
                t.lt(45)
                kriziky(n - 1, a / 3, pocet)
                t.rt(45)
                t.fd(-a)
                t.lt(360 / pocet)
    
    turtle.delay(0)
    t = turtle.Turtle()
    t.speed(0)
    kriziky(5, 150, 5)
    

  1. Riešenie:

    import turtle
    
    def troj3(n, a):
        if n == 0:
            t.fd(a)
        else:
            troj3(n - 1, a / 2)
            t.lt(120)
            t.fd(a / 2)
            t.rt(120)
            troj3(n - 1, a / 2)
            t.rt(120)
            t.fd(a / 2)
            t.lt(120)
            troj3(n - 1, a / 2)
    
    turtle.delay(0)
    t = turtle.Turtle()
    t.speed(0)
    troj3(6, 256)
    

  1. Riešenie:

    import turtle
    
    def pyramida(n, a):
        if n == 0:
            t.fd(a)
        else:
            pyramida(n - 1, a / 2)
            t.lt(90)
            pyramida(n - 1, a / 2)
            t.lt(180)
            pyramida(n - 1, a / 2)
            t.lt(90)
            pyramida(n - 1, a / 2)
    
    turtle.delay(0)
    t = turtle.Turtle()
    t.speed(0)
    pyramida(6, 256)
    

  1. Riešenie:

    import turtle
    
    def pyramida3(n, a):
        if n == 0:
            t.fd(a)
        else:
            pyramida3(n - 1, a / 2)
            t.lt(87)
            pyramida3(n - 1, a / 2)
            t.rt(174)
            pyramida3(n - 1, a / 2)
            t.lt(87)
            pyramida3(n - 1, a / 2)
    
    turtle.delay(0)
    t = turtle.Turtle()
    t.speed(0)
    pyramida3(6, 200)