funkcja rekurencyjna

0

cześć, chcę się przygotować do R. matury z infy.
W tym celu potrzebowałbym pomocy.
mamy np.
zadanie 1 z roku 2012 maj
nie wkleję linka, bo chyba niedozwolone ;x

np. jak przykładowo dla
powinienem zrobić te zadanie , krok po kroku żebym załapał .

byłbym wdzięczny za pomoc ..

0

Podaj chociaż treść zadania, bo nie każdy z nas ma przed oczami arkusz z zadaniami z ostatniej matury...

Jeśli chodzi Ci o samo załapanie krok po kroku to czego oczekujesz? Że nauczymy Cię czytać ze zrozumieniem i myśleć...? O dziwne rzeczy pytasz...

Każde zadanie musisz oczywiście przeczytać, zrozumieć, ułożyć sobie w głowie ogólny zarys programu (np. jaką będzie miał konstrukcję, jakich procedur / funkcji użyjesz, jakie zmienne będą potrzebne itd.), wypisać sobie potrzebne informacje w notatniku (jeśli o pisemną część chodzi) i wreszcie wziąć długopis do ręki i napisać algorytm bazując na zgromadzonych danych; Dokładnie to samo robisz przy zadaniach z informatyki co podczas rozwiązywania jakichkolwiek z jakiejkolwiek dziedziny; Czytasz treść, zbierasz informacje (dane, szukane bla bla...), w głowie zastanawiasz sie co masz zrobić i w jaki sposób i rozwiązujesz; Nic więcej nie można napisać;

kejkun napisał(a)

mamy np.
zadanie 1 z roku 2012 maj
nie wkleję linka, bo chyba niedozwolone ;x

A niby dlaczego...? Matura już była, kto miał pisać - napisał;

kejkun napisał(a)

np. jak przykładowo dla
powinienem zrobić te zadanie , krok po kroku żebym załapał .

Pisz po "polskiemu" bo z tego bełkotu niewiele można zrozumieć...


Dla tych, którym też nie chce się szukać arkuszy w szufladach: http://maturzysta.dlastudenta.pl/artykul/Egzamin_maturalny_informatyka,6986.html

0

dzięki za pomoc ..
właśnie nie rozumiem zadania , stąd prosiłem o pomoc ...
Dana jest liczba naturalna n > 0 i tablica różnych liczb całkowitych a[1..n] . Rozważamy
następującą rekurencyjną funkcję F z argumentem i będącym liczbą naturalną, 1<= i <= n .
Funkcja F (i)
jeżeli i = n to
wynikiem jest n
w przeciwnym razie
j := F (i+1)
jeżeli a[i]< a[ j] wtedy
wynikiem jest i
w przeciwnym razie
wynikiem jest j

a ) Dla danej 10-elementowej tablicy a [ 5,1,8,9,7, 2,3,11, 20,15] podaj w poniższej tabeli
wynik wywołania funkcji F dla danego argumentu i.
i np.
dla i = 9
jak mam rozumieć to polecenie ? ?

mamy liczbę naturalną n >0
a ta tablica liczb całkowitych a [ 1..n]
nie ogarniam tego zapisu.
pod spodem jest 10 elementowa tablica a
jak mam to jako całość odczytać ?

jeśli i = 9
to wtedy co z a ?
biorę pierwsze z tabelki, czy wartość zbliżoną do ?
i wtedy jak zachowuję się n ?
jeśli a =9 to n = 9 ?
gdyby ktoś pomógł w obczajeniu samego opisu zadania, byłbym wdzięczny : )

to jest zupełnie inne zadanie niż z matmy... śmiało mogę stwierdzić..

nie sądzisz, ze trochę ciężko rozwiązać zadanie nie rozumiejąc dobrze zapisu ?
stąd proszę o pomoc ...

jestem nowy na forum, i nie wiem czy mogę zamieścić linka do obcej strony, stąd w razie co nie zamieściłem , i to tylko z tego względu..
albo jakby ktoś mógł dać linka do podobnego zadania , ale z objaśnieniami czy coś : )

0
0. F(i):
1. if i = n then
2.   return n
3. j := F(i+1)
4. if a[i] < a[j] then
5.   return i
6. else
7.   return j

a) i=9, a ilość elementóww w tabeli n=10. wykonujesz funkcję F(9):
warunek w linijce 1 nie jest spełniony zatem przechodzimy do linijki 3. j := F(i+1) = F(9+1) = F(10)
wewnątrz funkcji wykonujesz F(10) - i=n zatem zwraca ona n
czyli wracając do funkcji F(9): j := F(10) = n = 10.
sprawdzasz warunek w linijce 4: a[9] < a[10]. fałsz zatem przechodzisz do linijki 7, czyli zwracasz j=9.
wynik: 9

0

dzięki wielkie za odpowiedź
w odpowiedzi jest f(i) = 10 hmm ?

" ilość elementóww w tabeli n=10. "
tzn. że niezależnie jakie weźmiemy i ( 3,5,6 itp. < 10 )
to zawsze n = 10 ?
czyli n = a
? i na tym polegał ten zapis hmm ?

" sprawdzasz warunek w linijce 4: a[9] < a[10]. fałsz zatem przechodzisz do linijki 7,"

dzięki wielkie : )

albo zwracam j = 10
"F(9): j := F(10) = n = 10."
tu mu chyba 10 przyporządkowałeś, także później wywołując j mamy 10 : ) .

dobra dzięki czaję, chodzi o wywołanie z a9 i a10 z tabelki : )

ale z tym n jak jest
zawsze n = 10
w tym zadaniu ??

0

" sprawdzasz warunek w linijce 4: a[9] < a[10]. fałsz zatem przechodzisz do linijki 7,"

chyba prawda, dlatego przechodzę do linijki 5
dzięki wielkie : )

Dupa lala, a[9] < a[10] to nie to samo co 9 < 10... a[9] = 20, a[10] = 15, więc a[9] < a[10] == False, bo 20 < 15 == False; Czytaj uważnie;

Dostałeś przecież kod w pseudojęzyku od @dawidgarus, więc prześledź go dla każdej z liczb;

0

tak, dzięki wielkie : )
a jak jest z n w tym zadaniu
czy jest ono zawsze n = 10 ?
czyli tyle ile jest w a [ ] ?

bo dla i =7
odpowiedź to f(i) = 7
także hmm ?
wtedy n = 7 ?

nadal nie czaję
czy n w tym zadaniu jest stałe i wynosi 10
czy też od czego zależne jest jego wartość? ? ?

ej dobra to wam powiem jak ja widziałbym to dla i = 7
0. F(i):

  1. if i = n then
  2. return n
  3. j := F(i+1)
  4. if a[i] < a[j] then
  5. return i
  6. else
  7. return j

n = 10
zatem idziemy do kroku numer 3.
j:= 8
4. a[7] < a[8] ? 3 < 11
true
zatem do linijki 5
return i
wynik 7 : )
dzięki wielkie : )

0

Skoro rozumiesz w pseudojęzyku, to w Pascal'u także powinieneś:

function Foo(const I: Byte): Byte;
const
  A: array [1 .. 10] of Byte = (5, 1, 8, 9, 7, 2, 3, 11, 20, 15);
  N = 10;
var
  J: Byte;
begin
  if I = N then
    Result := N
  else
    begin
      J := Foo(I + 1);

      if A[I] < A[J] then
        Result := I
      else
        Result := J;
    end;
end;

Wyniki dla I in [1 .. 10]:

Foo(1)  = 2
Foo(2)  = 2
Foo(3)  = 6
Foo(4)  = 6
Foo(5)  = 6
Foo(6)  = 6
Foo(7)  = 7
Foo(8)  = 8
Foo(9)  = 10
Foo(10) = 10

Chyba, że sam nie zrozumiałem zadania... ;-)

0

czaję co napisałeś, chociaż
nie widzę dokładnie , w którym momencie zaznaczyłeś , aby wyświetliły się wyniki od 1 do 10 hmm ?
ja preferuje bardziej coś w stylu
for i := 1 to 10
do
czy coś takiego.

0

http://ideone.com/2QVSy
tu masz kod w pythonie który wyświetla dokładnie krok po kroku co jest wykonywane. zwróć uwagę na rekurencję jak jest zagnieżdżona, przykład dla F(7):

 sprawdzamy czy i == n? (7 == 10)
 falsz. przypisujemy j wartosc funkcji F(i+1) czyli F(8)
   sprawdzamy czy i == n? (8 == 10)
   falsz. przypisujemy j wartosc funkcji F(i+1) czyli F(9)
     sprawdzamy czy i == n? (9 == 10)
     falsz. przypisujemy j wartosc funkcji F(i+1) czyli F(10)
       sprawdzamy czy i == n? (10 == 10)
       prawda zatem F(10) zwraca n=10
     j ma wartosc 10
     sprawdzamy czy a[i] < a[j]? (20 < 15)
     falsz zatem F(9) zwraca j=10
   j ma wartosc 10
   sprawdzamy czy a[i] < a[j]? (11 < 15)
   prawda zatem F(8) zwraca i=8
 j ma wartosc 8
 sprawdzamy czy a[i] < a[j]? (3 < 11)
 prawda zatem F(7) zwraca i=7
0

Ale jesteś gamoń... :-P

No jasne, że samo się nie wyświetliło:

program Project1;

{$APPTYPE CONSOLE}

  function Foo(const I: Byte): Byte;
  const
    A: array [1 .. 10] of Byte = (5, 1, 8, 9, 7, 2, 3, 11, 20, 15);
    N = 10;
  var
    J: Byte;
  begin
    if I = N then
      Result := N
    else
      begin
        J := Foo(I + 1);

        if A[I] < A[J] then
          Result := I
        else
          Result := J;
      end;
  end;

var
  I: Byte;
begin
  for I := 1 to 10 do
    WriteLn('Foo(', I, ') = ', Foo(I));

  ReadLn;
end.

Wyjście:

Foo(1) = 2
Foo(2) = 2
Foo(3) = 6
Foo(4) = 6
Foo(5) = 6
Foo(6) = 6
Foo(7) = 7
Foo(8) = 8
Foo(9) = 10
Foo(10) = 10

Teraz wszystko jasne?

1 użytkowników online, w tym zalogowanych: 0, gości: 1