• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Iteracja vs Rekurencja

Object Storage Arubacloud
0 głosów
7,592 wizyt
pytanie zadane 12 lipca 2017 w C i C++ przez Marceli99 Obywatel (1,160 p.)
Cześć, nie potrafię logicznie zrozumieć różnicy pomiędzy rekurencją, a iteracją, moje doświadczenie z programowaniem jest równe 0.0001%, jestem bardzo, ale to bardzo zielony. Wiem jedynie tyle, że iteracja to odwoływanie się do początków danej funkcji aby ta mogła się jeszcze raz wykonać aż spełni określony warunek, a rekurencja to wykonywanie funkcji do spełnienia określonego warunku, ale bez "fizycznego" odwoływania się do jej początków, jakim cudem funkcja wie że musi się powtórzyć? Jak tę rekurencję zaznaczyć?

Uczę się w C++
komentarz 12 lipca 2017 przez Benek Szeryf (91,010 p.)

jakim cudem funkcja wie że musi się powtórzyć? Jak tę rekurencję zaznaczyć?

Bo zwraca samą siebie, a nie konkretną wartość (np. liczbę 5.6). A to że zwraca samą siebie oznacza, że żeby otrzymać wynik, znów musi się wykonać. Czyli funkcja nie zwraca gotowego produktu, tylko przepis jak ten produkt otrzymać.

komentarz 12 lipca 2017 przez Marceli99 Obywatel (1,160 p.)
Czyli wynikiem rekurencji jest funkcja sama w sobie? Ma to jakieś zastosowanie? Czy raczej się tego nie używa?
komentarz 12 lipca 2017 przez Benek Szeryf (91,010 p.)
Tak, wynikiem jest funkcja, dla której z góry nie znamy argumentu. Na przykład zwrócenie funkcji, która wylicza 2 + 2 nie oznacza rekurencji, bo zawsze ta funkcja zwraca 4.

Rekurencje się stosuje w wielu miejscach, klasykiem jest obliczanie silni danej liczby naturalnej. Rekurencja ma tę zaletę, że taki kod jest krótki i czytelny dla programisty w porównaniu z iteracją. Wadą jest to, że pochłania więcej zasobów niż iteracja.

2 odpowiedzi

+3 głosów
odpowiedź 12 lipca 2017 przez Bondrusiek Maniak (61,370 p.)

Witam,

Iteracja (łac. iteratio – powtarzanie) – czynność powtarzania (najczęściej wielokrotnego) tej samej instrukcji (albo wielu instrukcji) w pętli. Mianem iteracji określa się także operacje wykonywane wewnątrz takiej pętli.

Definicja Ci mówi że jest to czynność powtarzania tej samej instrukcji w pętli.

int i=0;
while (i<10) {
  i++;//element iterowany czyli w pierwszej iteracji i = 0, dalej i = 1 i tak do 9
}

Rekurencja, zwana także rekursją (ang. recursion, z łac. recurrere, przybiec z powrotem) – odwoływanie się np. funkcji lub definicji do samej siebie

long long suma(int n)
{
  if(n<1) 
    return 0;
 
  return n+suma(n-1);//odwołanie się do samej siebie(rekurencja)
/*
następnie jeśli argument to umożliwia to zostanie wywołana funkcja 
long long suma(int n - 1) {
 if((n-1)<1) return 0; 
return n+suma((n-1)-1)
i następnie jeśli to możliwe zostanie wywołana funkcja suma(n-2) jeśli jest to możliwe (warunek if). 
*/
}

 

komentarz 12 lipca 2017 przez Marceli99 Obywatel (1,160 p.)

Cześć, zrobiłem sobie taki kod - chciałem aby sprawdzał czy wartość i jest mniejsza od 10 i jeśli tak to żeby dodawał o 1 i to wypisywał. :) Coś nie gra... Bo po wpisaniu wartości nic się nie dzieję, nawet program nie chcę się zamknąć.

 

#include <iostream>

using namespace std;

int i=0;

int main ()
{
    cout << "Wprowadź wartość i: " << endl;
    cin >> i;
    while (i<10); {
    i++;
    cout << "i";
    }
    return 0;
}

 

komentarz 12 lipca 2017 przez Bondrusiek Maniak (61,370 p.)

Witam,

usuń średnik z pętli while()

#include <iostream>
 
using namespace std;
 
int i=0;
 
int main ()
{
    cout << "Wprowadź wartość i: " << endl;
    cin >> i;
    while (i<10) {//stąd usuń ;
    i++;
    cout << "i " << i;// tu jeszcze można dodać 'i' aby //wyświetlało wartość
    }
    return 0;
}

PS.

Unikaj polskich znaków w konsoli bo wtedy wychodzą 'krzaczki'

+2 głosów
odpowiedź 12 lipca 2017 przez CenterPL Pasjonat (19,070 p.)

Prosto mówiąc:

iteracja to pętla, np masz 10 elementów, przechodzisz po kolei po każdym z nich. Albo masz licznik i do spełnienia pewnego warunku wykonujesz zadanie w pętli.

Rekurencja to natomiast gdy funkcja wywołuje samą siebie. Przykłady:

- Iteracja

for(int = 0; i <= 10; i++) std::cout<<i<<endl;

- Rekurencja

int fib(int n)
{
    if(n == 0) return 1;
    else if(n == 1) return 1;
    else return fib(n-1) + fib(n-2);
}

 

komentarz 12 lipca 2017 przez niezalogowany

Można też przykład pierwszy zrobić z iteracji:

#include <iostream>
using namespace std;

void iteracja(int i0, int max)
{
    for(int i=i0; i<max; i++)
    {
        cout<<i<<"\n";
    }
}

void rekurencja(int it, int max)
{
    if(it<max)
    {
        cout<<it<<"\n";
        rekurencja(++it, max);
    }
}

int main()
{
    iteracja(0, 10);
    cout<<"\n";
    rekurencja(0, 10);
}

komentarz 12 lipca 2017 przez Benek Szeryf (91,010 p.)

Rekurencja to natomiast gdy funkcja wywołuje samą siebie.

Tak, ale warto dodać, że może wywoływać inną funkcję. Na przykład funkcja A() wywołuje B(), a B() znów wywołuje A().

Podobne pytania

0 głosów
1 odpowiedź 987 wizyt
pytanie zadane 11 listopada 2018 w C i C++ przez Shimeo7 Obywatel (1,910 p.)
0 głosów
4 odpowiedzi 6,347 wizyt
pytanie zadane 16 maja 2015 w C i C++ przez Wiciorny Ekspert (270,190 p.)
0 głosów
3 odpowiedzi 410 wizyt
pytanie zadane 14 sierpnia 2021 w C i C++ przez Avernis Nałogowiec (27,400 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...