[C++] rekurencja (rekursja).

xdominika
Użytkownik
Użytkownik
Posty: 81
Rejestracja: 14 lis 2019, o 22:59
Płeć: Kobieta
wiek: 19
Podziękował: 23 razy

[C++] rekurencja (rekursja).

Post autor: xdominika »

Jak napisać programy:
1) void rozklad(int n)
który drukuje rozkład liczby na czynniki pierwsze rekurencyjnie. Wiem jak zrobić to iteracyjnie, ale za pomocą rekursji nie mam pojęcia.
2) void ciag(int p, int r, int n)
który drukuje n-elementowy ciąg arytmetyczny o początkowym wyrazie p i różnicy r
Ten również potrafię napisać iteracyjnie, rekurencyjnie jedynie udaje mi się tak, że wyświetla się n-ty wyraz a nie wszystkie (używam funkcji int, przy void mam błąd, że nie mogę użyć operatora +).

Kod: Zaznacz cały

int ciag(int p, int r, int n)
{
    if (n==1)
        return p;
    else
       return ciag(p, r, n-1)+r;
}
Ostatnio zmieniony 21 lis 2020, o 17:15 przez Afish, łącznie zmieniany 2 razy.
Powód: Poprawa wiadomości.
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10223
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

Re: C++ rekurencja (rekursja).

Post autor: Dasio11 »

1.

Kod: Zaznacz cały

void rozklad( int n )
{
    if( n == 1 )
    {
        std::cout << 1;
        return;
    }

    unsigned int d = 2;
    while( n % d != 0 ) ++d;

    std::cout << d;
    if( d < n )
    {
        std::cout << "*";
        rozklad( n/d );
    }
}
rivit
Użytkownik
Użytkownik
Posty: 163
Rejestracja: 28 paź 2018, o 17:31
Płeć: Mężczyzna
Podziękował: 70 razy
Pomógł: 2 razy

Re: C++ rekurencja (rekursja).

Post autor: rivit »

2.

Kod: Zaznacz cały

void ciag(int p, int r, int n){
    if(!n) return;

    std::cout << p << ", ";
    ciag(p+r, r, n-1);
}
Przykładowe wywołanie:

Kod: Zaznacz cały

ciag(-1, 2, 5);
Rezultat:

Kod: Zaznacz cały

-1, 1, 3, 5, 7,
xdominika
Użytkownik
Użytkownik
Posty: 81
Rejestracja: 14 lis 2019, o 22:59
Płeć: Kobieta
wiek: 19
Podziękował: 23 razy

Re: C++ rekurencja (rekursja).

Post autor: xdominika »

rivit pisze: 17 lis 2020, o 12:38 2.

Kod: Zaznacz cały

void ciag(int p, int r, int n){
    if(!n) return;

    std::cout << p << ", ";
    ciag(p+r, r, n-1);
}
Przykładowe wywołanie:

Kod: Zaznacz cały

ciag(-1, 2, 5);
Rezultat:

Kod: Zaznacz cały

-1, 1, 3, 5, 7,
Niestety wyświetla mi się tylko pierwszy wyraz ciągu
rivit
Użytkownik
Użytkownik
Posty: 163
Rejestracja: 28 paź 2018, o 17:31
Płeć: Mężczyzna
Podziękował: 70 razy
Pomógł: 2 razy

Re: C++ rekurencja (rekursja).

Post autor: rivit »

W takim razie pokaż, jak użyłaś mojego kodu.
xdominika
Użytkownik
Użytkownik
Posty: 81
Rejestracja: 14 lis 2019, o 22:59
Płeć: Kobieta
wiek: 19
Podziękował: 23 razy

Re: C++ rekurencja (rekursja).

Post autor: xdominika »

rivit pisze: 18 lis 2020, o 15:13 W takim razie pokaż, jak użyłaś mojego kodu.

Kod: Zaznacz cały

 void ciag(int p, int r, int n){
    if(!n) return;

    cout << p << ", ";
    ciag(p+r, r, n-1);
} 
Oczywiście wcześniej użyłam

Kod: Zaznacz cały

 using namespace std; 
rivit
Użytkownik
Użytkownik
Posty: 163
Rejestracja: 28 paź 2018, o 17:31
Płeć: Mężczyzna
Podziękował: 70 razy
Pomógł: 2 razy

Re: C++ rekurencja (rekursja).

Post autor: rivit »

Trochę się nie zrozumieliśmy - chodziło mi o to, jak wygląda cały twój kod, bo błąd leży ewidentnie w wywołaniu funkcji ciag


Całość programu u mnie wygląda tak:

Kod: Zaznacz cały

#include <iostream>

void ciag(int p, int r, int n){
    if(!n) return;

    std::cout << p << ", ";
    ciag(p+r, r, n-1);
}

int main() {
    ciag(-1, 2, 5);
}
xdominika
Użytkownik
Użytkownik
Posty: 81
Rejestracja: 14 lis 2019, o 22:59
Płeć: Kobieta
wiek: 19
Podziękował: 23 razy

Re: C++ rekurencja (rekursja).

Post autor: xdominika »

rivit pisze: 20 lis 2020, o 12:20 Trochę się nie zrozumieliśmy - chodziło mi o to, jak wygląda cały twój kod, bo błąd leży ewidentnie w wywołaniu funkcji ciag


Całość programu u mnie wygląda tak:

Kod: Zaznacz cały

#include <iostream>

void ciag(int p, int r, int n){
    if(!n) return;

    std::cout << p << ", ";
    ciag(p+r, r, n-1);
}

int main() {
    ciag(-1, 2, 5);
}
Ja w sposób rekurencyjny potrafię jedynie stworzyć funkcję typu int, która zwraca n-ty wyraz ciągu, a żeby rekurencyjnie wyświetlały mi się wszystkie wyrazy tego ciągu, niestety nie udało mi się wymyślić.

Kod: Zaznacz cały

void ciag1(int p, int r, int n){
    if(n==1) cout<<p;
    else cout<<ciag(p, r, n-1)+r;
}
Niestety nie działa on jak powinien.
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10223
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

Re: [C++] rekurencja (rekursja).

Post autor: Dasio11 »

Ale na czym w tej chwili polega Twój problem? Chcesz poznać rozwiązanie problemu, czy chcesz wytłumaczenia dlaczego Twoje rozwiązanie jest złe, czy jeszcze coś innego? Bo jeśli to pierwsze, to rivit już dwa razy podał Ci pełny kod.
ODPOWIEDZ