poniek Posted March 13, 2010 Report Share Posted March 13, 2010 mam poważny problem z nastepujacymi zadaniami : nie mam pojecia jak się do nich zabrać sposobem iteracyjnym jest bardzo prosto ale nie mam pojecja jak zrobić te zadania rekurencyjnie proszę o pomoc : oto te zadania Zadanie 1 W trójkąt równoboczny o boku długości 1 wpisujemy kolejny trójkąt równoboczny, a w niego następny. Wyznacz wzór rekurencyjny na długość boku n-tego wpisanego trójkąta oraz napisz program, który wykorzysta zdefiniowaną przez ciebie funkcję i dla podanego przez użytkownika n wyświetli długość n-tego boku trójkąta. Zadanie 2 Napisz program, który algorytmem rekurencyjnym wyznaczy wartość sumy: 1/2 + 2/3 + 3/4 + ... + n/(n+1) dla podanej liczby n. Zadanie 3 Napisz program, który algorytmem rekurencyjnym wyznaczy ilość cyfr w podanej liczbie naturalnej n. Link to comment Share on other sites More sharing options...
KANAR123 Posted March 13, 2010 Report Share Posted March 13, 2010 Gotowych programów nie dostaniesz... Rekurencja to wywoływanie funkcji/procedury przez nią samą. Musisz napisać taką procedurę i dostosować do własnych potrzeb. Pozdrawiam KANAR123 Link to comment Share on other sites More sharing options...
poniek Posted March 13, 2010 Author Report Share Posted March 13, 2010 Dpskonale wiem na co to jest rekurencja ale nie mam bladego pojęcia jak mam to zrobic Link to comment Share on other sites More sharing options...
Jason Posted March 14, 2010 Report Share Posted March 14, 2010 Na przykładzie drugiego zadania... Na początku sprawdzasz warunek końcowy, czyli jeśli n:D ? #include <stdio.h> float rek(float n) { if (n<1.0) return 0; else return (n/(n+1.0))+rek(n-1.0); } int main() { printf("%f",rek(3)); return 0; } Link to comment Share on other sites More sharing options...
poniek Posted March 14, 2010 Author Report Share Posted March 14, 2010 drugie zadanie udało mi się rozwiązać akurat może na przykładzie zadania pierwszego bo tego w ogóle nie rozumie uses crt; var n:integer; function suma(n:integer):real; begin if n=1 then suma:=1/2 else suma:=suma(n-1) + n/(n+1); end; procedure liczby; begin writeln('*** Podaj Liczb: '); readln(n); end; begin clrscr; liczby; writeln('** Wynik: ',suma(n):0:2); readkey; end. Link to comment Share on other sites More sharing options...
jozekkg Posted March 14, 2010 Report Share Posted March 14, 2010 Co do zadania pierwszego, zauważ, że bok każdego następnego trójkąta jest o połowę mniejszy od poprzedniego. Funkcję napisz wzorując się na podanym tutaj przez kolegów rozwiązaniu zadania drugiego. Jeśli chodzi o zadanie trzecie, spróbuj dzielić liczbę przez dziesięć, do momentu, aż wartość całkowita będzie równa zero. Edit Integer -------------- Przykład rekurencji http://forum.unit1.pl/index.php?showtopic=3736&hl=repeat Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.