Hirdetés

Új hozzászólás Aktív témák

  • Gyuri16

    senior tag

    válasz Marked #2361 üzenetére

    ilyen egyszeru fuggveny szamolasnal celszeru felirni matikusan mit is akarsz. legyen f(n) a fuggveny, ami visszaadja a sorozat n-edik elemet. formalisan valahogy igy nez ki:
    f(1) = 200
    f(2) = 300
    f(n) = f(n-2)^2 + f(n-1)^2 <- ha n>2

    a pascalos fuggveny ami ezt szamolja nagyjabol igy fog kinezni:
    megnezi hogy n<=2 ha igen akkor tudod az eredmenyt (200/300), ha nem akkor rekurzivan meghivod ugyanazt a fuggvenyt kisebb parameterekkel (n-2, n-1) es az eredmenyt behelyettesited a kepletbe. mivel minden egyes hivasnal kisebbek lesznek a parameterek ezert veges idoben megkapod a valaszt.

    pascalban ez konkretan igy nezne ki:

    function f(n: integer):integer;
    begin
    if (n = 1) then
    Result:=200;
    if (n = 2) then
    Result:=300;
    if (n>2) then
    Result:=Sqr(f(n-2)) + Sqr(f(n-1));
    end;

    (nem futtattam le, szoval nezd at, remelem legalabb szintaktikailag eltalaltam)

    na most, hogy ez miert is mukodik. amikor eler a program a keplethez ahol az n-edik elemet szamolja, akkor szuksege van a ket kisebb elemre a sorozatbol. mivel tudja, hogy a fuggveny ezt a sorozatot szamolja meghivja a kivant parameterekkel. leirom az f(4) hogyan fut le:

    f(4) = f(2)^2 + f(3)^2
    meghivodik az f(2)
    f(2) = 300;
    visszater az f(2) most az f(4) ben vagyunk a + jelnel
    meghivodik az f(3)
    f(3) = f(1)^2 + f(2)^2
    meghivodik az f(1)
    f(1) = 200
    visszater az f(1), f(3) ban vagyunk a + jelnel
    meghivodik az f(2)
    f(2) = 300
    visszater az f(2), f(3) ban vagyunk, a keplet vegen, megvan az eredmeny
    visszater az f(3), f(4)ben vagyunk, megvan az eredmeny
    vege

    remelem nem zavartalak meg jobban ossze :)

    annyit meg hozzatennek, hogy erre a feladatra nem ez a legefektivebb megoldas, mivel ahogy latod a peldaban az f(2) tobbszor is meg van hivva, pedig eleg lenne egyszer, akar egy egyszeru ciklussal szamolni az elemeket elsotol felfele (mindig az utolso kettot kell megjegyezni)

Új hozzászólás Aktív témák