OLICYBER e Pseudocodice


Anno 2021 – 8

Considera la seguente funzione

function x(n)
{
    if(n <= 0) 
        return 0
    return 1+y(n-2)
}
function y(n) 
{
    if(n <= 0) 
        return 0
    return 2+x(n-3)
}

Quale numero ritorna la chiamata a y(100)?

SOLUZIONE 1

nx(n)y(n)
-200
-100
000
11+y(-1) = 12+x(-2) = 2
21+y(0) = 12+x(-1) = 2
31+y(1) = 32+x(0) = 2
41+y(2) = 32+x(1) = 3
51+y(3) = 32+x(2) = 3
61+y(4) = 42+x(3) = 5
1001+y(98)2+x(97)

SOLUZIONE 2

Osserva

  • x(n) = 1+y(n-2) = 1+(2+x((n-2)-3)) = 3+x(n-5), n >= 5
  • y(n) = 2+x(n-3) = 2+(1+y((n-3)-2)) = 3+y(n-5), n >= 5
  • y(100) = 3+y(95) = 6+y(90) = 9+y(85) = … = 3*(i)+y(100-5*i) = … = 3*20+y(100-5*20) = 60+y(0) = 60

Anno 2021 – 9

Data la seguente funzione:

function f(a, b) 
{
    if(b == 0)
        return a
    if(b > 0)
        return 1 + f(a, b-1)
    return f(a, b+1) - 1
}

Cosa calcola f(a, b)?

SOLUZIONE

abf(a, b)
000
011+f(0, 0)1
101
021+f(0, 1) = 1+1+f(0, 0) = 2+02
111+f(1, 0) = 1+12
202
abb+f(a, 0) = b+aa+b

Anno 2021 – 11

Data la seguente funzione:

function f(n) 
{
    if(n < 4) 
    {
        return 1
    }
    return 2*f(n-1) - 3*f(n-2) + 1*f(n-1)
}

Cosa ritorna la chiamata a f(82)?

SOLUZIONE

n3 [f(n-1) – f(n-2)]f(n)
01
11
21
31
43*[f(3)-f(2)] = 3*[1-1] = 3*00
53*[f(4)-f(3)] = 3[0-1] = 3*(-1)-3
63*[f(5)-f(4)] = 3*[-3-0] = 3*(-3)-9
73*[f(6)-f(5)] = 3*[-9+3] = 3*(-6)-18
83*[f(7)-f(6)] = 3*[-18+9] = 3*(-9)-27
93*[f(8)-f(7)] = 3*[-27+18] = 3*(-9)-27
103*[f(9)-f(8)] = 3*[-27+27] = 3*(0)0

f(4) = 3(1-1) = 0

f(10) = 3*f(9)-3*f(8) = 9*f(8)-9*f(7)-3*f(8) = 6*f(8)-9*f(7) = 18*f(7)-18*f(6)-9*f(7) = 9*f(7)-18*f(6) = 27*f(6)-27*f(5)-18*f(6) = 9*f(6)-27*f(5) = 27*f(5)-27*f(4)-27*f(5) = -27*f(4) = 0

f(16) = … = -27*f(10) = 0

f(82) = f(4+13*6) = 0


SOLUZIONE