############################################################# ## 4. prednaska # ## funkce, rekurze - vypocty faktorialu a Fibonacciho cisel # ############################################################# #1. cast #Nejdrive jsme si zkouseli spocitat faktorial ruznymi zpusoby, #nejdrive rekurzivne, pak cyklem def fac(x): if(x==1): return 1 else: return x*fac(x-1) for i in range(1,21): print("Faktorial cisla %i je %i"%(i,fac(i))) #alternativni zpusob vypoctu bez rekurze def fac2(x): vysledek=1 for i in range(1,x+1): vysledek*=i return vysledek print(fac2(8)) ############################################################# #2.cast #Pote jsme pocitali Fibonacciho cisla nejdrive rekurzivne(pomalu), #pote jsme k tomu pridali pamatovani si vypoctenych hodnot(=zaklad #dynamickeho programovani) a nakonec je spocitali jeste chytreji :] def fib(x): if(x<=2): return 1 else: return fib(x-1)+fib(x-2) for i in range(1,20): print("%i. Fibonacciho cislo je %i"%(i,fib(i))) #jiny zpusob s pamatovanim x=input() #1.inicializace a nastaveni pole pole=range(0,x+1) for i in pole: pole[i]=0; pole[1]=1 pole[2]=1 #2.samotna funkce def fib2(x): if(pole[x]!=0): return pole[x] else: #jeste Fibonacciho cislo nemame, tak ho musime spocitat #a rovnou si ho pritom ulozime pole[x]=fib2(x-1)+fib2(x-2) return pole[x] for i in range(1,x+1): print("%i. Fibonacciho cislo je %i"%(i,fib2(i))) #a jeste jeden zpusob n=input() pole=[0,1,1] for i in range(3,n+1): pole.append(pole[i-1]+pole[i-2]) for i in range(1,n+1): print("%i. Fibonacciho cislo je %i"%(i,pole[i]))