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

rekursia zawarta w procedurze , konwersja liczb

Object Storage Arubacloud
0 głosów
133 wizyt
pytanie zadane 5 listopada 2016 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
edycja 5 listopada 2016 przez Jakub 0
#include <iostream>
#include <windows.h>

using namespace std;

int n;

void convert_dec_to_bin(int n)
{
    if(n==0) return;
    convert_dec_to_bin(n/2);
    cout<<n%2;
}

int main()
{
    while(true)
    {
        system("cls");
        cin>>n;

        if(n==0) cout<<0;
        else convert_dec_to_bin(n);
        cout<<endl;

        system("pause");
    }

    return 0;
}

 

Witam , mam problem z pełnym zrozumieniem jak działania ten algorytm , rozumiem ogólnie na czym to polega i jak on przebiega . Ale nurtuje mnie pytanie skąd komputer (program) wie że przy powrocie rekurencji ma wykonywać się linijka obliczająca modulo (resztę z dzielenia - n%2) a nie od nowa wykonywać funkcję : convert_dec_to_bin(n);           

 

    Wiem że moje pytanie może wydawać się nie jasne ):     Dziękuje  za wszelkie odpowiedzi i proszę o wyrozumiałość, jestem początkujący i to moje pierwsze pytanie na forum (: (:

2 odpowiedzi

0 głosów
odpowiedź 5 listopada 2016 przez criss Mędrzec (172,590 p.)
wybrane 6 listopada 2016 przez Jakub 0
 
Najlepsza

Hm. No jest niejasne. 

skąd komputer (program) wie że przy powrocie rekurencji ma wykonywać się linijka obliczająca modulo (resztę z dzielenia - n%2) a nie od nowa wykonywać funkcję

A dlaczego miałaby się znowu wykonywać funkcja? Najprostszy przykład (tylko 1 stopień rekurencji) - przekazujesz do funkcji 1. Funkcja sprawdza czy 1 == 0. Nie równa się, więc przechodzi do następnej instrukcji - wywołuje samą siebie tym razem z argumentem 1/2 (czyli 0). Wykonuje się rekurencyjne wywołanie. 0 == 0 więc funkcja kończy działanie i sterowanie wraca do pierwszego wywołania. Wykonuje się kolejna instrukcja a więc wypisuje wynik działania 1 % 2.

Wszystko wykonuje się instrukcja po instrukcji. Pewnie nie zrozumiałem o co ci chodzi, ale jak sam napisałeś - mało jasne jest to twoje pytanie.

komentarz 6 listopada 2016 przez Jakub 0 Pasjonat (23,120 p.)
Dzięki już bardziej rozumiem
0 głosów
odpowiedź 5 listopada 2016 przez morele123 Gaduła (4,790 p.)
Wykonuje się wszystko. Np. dla wartości 5:

Sprawdza czy n==0, nie jest więc nic nie robi;

Wywołuje swoją funkcję z parametrem 5/2 czyli 2;

Wypisuje n%2;

Teraz dla wartości 2 się wykonuje;

Potem dla 1

I na końcu dla 0;

tutaj zachodzi już n==0; więc funkcja się kończy;

Podobne pytania

0 głosów
3 odpowiedzi 397 wizyt
pytanie zadane 13 listopada 2015 w C i C++ przez theseith Nowicjusz (160 p.)
+1 głos
3 odpowiedzi 240 wizyt
+1 głos
1 odpowiedź 231 wizyt
pytanie zadane 8 kwietnia 2021 w Visual Basic przez Piotr Nita Nowicjusz (130 p.)

92,579 zapytań

141,431 odpowiedzi

319,657 komentarzy

61,963 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!

...