print('-----------------------------------------------------------------')
print('Iteratív és rekurzív algoritmusok')
print('-----------------------------------------------------------------')


def R_osszeg(n, lista):  # rekurzív megoldás
    if n > 0:
        return R_osszeg(n - 1, lista) + lista[n - 1]
    else:
        return 0


def osszeg(lista):  # iteratív megoldás
    sum = 0
    for i in range(len(lista)):
        sum += lista[i]
    return sum


# -----------------------------------------------------------
def R_faktoriális(n):  # rekurzív megoldás
    if n > 1:
        return n * R_faktoriális(n - 1)
    else:
        return 1


def Faktoriális(n):  # iteratív megoldás
    F = 1
    for i in range(1, n + 1):
        F = F * i
    return F


# -----------------------------------------------------------
def R_Fibonacci(n):  # rekurzív megoldás
    if n == 0:
        return 0
    if n == 1:
        return 1
    if n > 1:
        return R_Fibonacci(n - 1) + R_Fibonacci(n - 2)


def Fibonacci(n):  # iteratív megoldás
    F = 0;
    elozo = 1;
    for i in range(n):
        kovetkezo = F + elozo;
        elozo = F;
        F = kovetkezo;
    return F;


# -----------------------------------------------------------
lst = [2, 4, 6, 8]
print('Összegzés - lista elemei: ', lst)
print('"Normál" összegzés eredménye: ', osszeg(lst))
print('Rekurzív összegzés eredménye: ', R_osszeg(len(lst), lst))

print('-----------------------------------------------------------------')
print('"Normál" faktoriális számítás: ', Faktoriális(int(input('n faktoriális, n='))))
print('Rekurzív faktoriális számítás: ', R_faktoriális(int(input('n faktoriális, n='))))

print('-----------------------------------------------------------------')
print('"Normál" Fibonacci-számok.. : ', [Fibonacci(i) for i in range(int(input('n Fibonacci-szám, n=')))])
print('"Rekurzív" Fibonacci-számok : ', [R_Fibonacci(i) for i in range(int(input('n Fibonacci-szám, n=')))])