Strona 1 z 1
[C++] rekurencja (rekursja).
: 17 lis 2020, o 00:17
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;
}
Re: C++ rekurencja (rekursja).
: 17 lis 2020, o 08:41
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 );
}
}
Re: C++ rekurencja (rekursja).
: 17 lis 2020, o 12:38
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:
Rezultat:
Re: C++ rekurencja (rekursja).
: 18 lis 2020, o 14:41
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:
Rezultat:
Niestety wyświetla mi się tylko pierwszy wyraz ciągu
Re: C++ rekurencja (rekursja).
: 18 lis 2020, o 15:13
autor: rivit
W takim razie pokaż, jak użyłaś mojego kodu.
Re: C++ rekurencja (rekursja).
: 20 lis 2020, o 10:25
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
Re: C++ rekurencja (rekursja).
: 20 lis 2020, o 12:20
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);
}
Re: C++ rekurencja (rekursja).
: 25 lis 2020, o 00:14
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.
Re: [C++] rekurencja (rekursja).
: 25 lis 2020, o 09:32
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.