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

Prosta funkcja do napisania

Object Storage Arubacloud
+3 głosów
458 wizyt
pytanie zadane 7 kwietnia 2015 w C i C++ przez kurekq Nowicjusz (200 p.)

Hej - mam do napisania bardzo prostą funkcję w C++, ale jakoś nie mogę sobie z nią poradzić. Ma to byc funkcja rekurencyjna, która ma pobierać dwa argumenty - x i y, a następnie podnosić x do potęgi y.

Za pomocą zwykłej funkcji lub po prostu pęlti jest to dla mnie banalne, ale nie wiem jak to zrobić w funkcji rekurencyjnej. W zwykłej funkcji robię to tak:

http://ideone.com/e.js/tvLElb

 

6 odpowiedzi

+2 głosów
odpowiedź 7 kwietnia 2015 przez triak1 Nowicjusz (180 p.)
Witam a ja gotowca nie prześlę tylko odeślę do poradnika dzięki któremu rekurencje zrozumiałem polecam obejrzyj a nie pożałujesz jak za pierwszym razem nie skumasz to się nie przejmuj wróć do poradnika jaksię będziesz czuł na siłach jak to mówi mój ulubiony nauczyciel INTERNETOWY "Slight Edge". Przy tej okazji chciałbym podziękować autorowi w/w poradnika za to co wyprawia w polskim internecie.

Dziękuję Panie Mirku
komentarz 7 kwietnia 2015 przez katolik6 Dyskutant (8,140 p.)
To dasz linka, czy jak mam rozumieć ten wpis?
komentarz 7 kwietnia 2015 przez iwan9449 Pasjonat (20,810 p.)
Zapewne chodziło o film Pana Mirosława o rekurencji :)
komentarz 7 kwietnia 2015 przez katolik6 Dyskutant (8,140 p.)
Niby tak, ale są też inne, Pan Mirek ma świetne poradniki, co jednak nie oznacza, że z tego ktoś nie zrobił lepszego, a linka nie ma.
komentarz 7 kwietnia 2015 przez DarkEliat Bywalec (2,810 p.)
Też tak sądzę.
komentarz 8 kwietnia 2015 przez triak1 Nowicjusz (180 p.)
Upss coś się nie wkleiło i nie zwróciłem uwagi . Oczywiście chodzi o film Pana Mirosława https://www.youtube.com/watch?v=jNi_X5bvmQ0&list=PLOYHgt8dIdoy6YhMq-mR6SZgy3zDy7D5i&index=14
0 głosów
odpowiedź 7 kwietnia 2015 przez katolik6 Dyskutant (8,140 p.)
edycja 7 kwietnia 2015 przez katolik6
potega (int x, y) { if (y==1) return x; return potega (x,y-1)*x; } NIE TESTOWANE!!!
komentarz 7 kwietnia 2015 przez katolik6 Dyskutant (8,140 p.)
No i popełniłem 2 błędy XD (poprawione)
0 głosów
odpowiedź 7 kwietnia 2015 przez szmq Pasjonat (22,770 p.)

Działa wszystko poprawnie:




#include <iostream>
#include <conio.h>
using namespace std;
 
int x, y;

int potega(int a, int n)
{
  if (n==0)			
    return 1;			
  else
    return potega(a, n-1 )*a;
} 

int main(){
	
	cout << "Podaj x: ";
	cin >> x;
	cout << "Podaj y: ";
	cin >> y;
	
	cout << "potega y do x wynosi: " << potega(x, y);
	getch();
}
komentarz 7 kwietnia 2015 przez katolik6 Dyskutant (8,140 p.)
Teoretycznie moja ma 1 iteracje mniej, czyli jest szybsza
komentarz 7 kwietnia 2015 przez szmq Pasjonat (22,770 p.)
bardzo ciekawe ;)
0 głosów
odpowiedź 7 kwietnia 2015 przez iwan9449 Pasjonat (20,810 p.)
int potega(int x,int y)
{
    if(y==1)
    {
        return x;
    }
    return pot(x,y-1)*x;
}
0 głosów
odpowiedź 7 kwietnia 2015 przez DarkEliat Bywalec (2,810 p.)
Wiesz nie jestem pewien, lecz z rekurencją chodzi chyba o to, że funkcja wywołuje samą siebie.

Ja bym to napisał w ten sposób :

#include <iostream>

#include <conio.h>

using namespace std;

int potega(int x, int y)

{

int z = 1;

z*=x; // znaczy to to samo co z=z*x;

y--;

if(y>0)

{

potega();

}

else

{

cout<<"Wynik to : "<<z<<endl;

getch();

}

}

 

Nie jestem pewien, ale jest cień szansy, że prawdopodobnie tak to powinno wyglądać.
komentarz 7 kwietnia 2015 przez iwan9449 Pasjonat (20,810 p.)
Twoja funkcja pobiera parametry x i y, a wewnątrz niej wywołujesz funkcje bez parametów. Nie zadziała :)
komentarz 7 kwietnia 2015 przez DarkEliat Bywalec (2,810 p.)
To wybacz musiałem się pomylić.
komentarz 7 kwietnia 2015 przez katolik6 Dyskutant (8,140 p.)
Rozwieję ten cień: nie wysłałeś zmiennych przy ponownym wywołaniu funkcji. Fuuuu!!! Spóźniłem się!
komentarz 7 kwietnia 2015 przez DarkEliat Bywalec (2,810 p.)
Masz rację to nie zadziała. Wydaje mi się, że nawet błąd chyba wystąpi. A poza tym jest dobrze ?
komentarz 7 kwietnia 2015 przez iwan9449 Pasjonat (20,810 p.)
Nie da się stwierdzić czy Twoje rozwiązanie jest dobre, bo paramerty wpisane w nawiasię są niezwykle istotne :) Zauważ, że w przykładach powyrzej funkcja wywoływana wewnątrz samej siebie jest wywoływana ze zmniejszonym y o 1. Dzieki temu warunek zostanie prędzej czy później osiągnięty, a w Twoim kodzie nie zostanie osiągnięty :)
komentarz 7 kwietnia 2015 przez DarkEliat Bywalec (2,810 p.)
Spawdziłem ten mój kod z tą Twoją poprawką i wszystko się pięknie kompiluje i dobrze oblicza.
komentarz 7 kwietnia 2015 przez iwan9449 Pasjonat (20,810 p.)
Mógłbyś napisać co dokładnie zmieniłeś?
komentarz 7 kwietnia 2015 przez DarkEliat Bywalec (2,810 p.)
Prócz tego co ty zauważyłeś to w mainie nadałem wartości zmiennym x i y, a później wywołałem funkcję potęga (w ten sposób potega(x, y);).
0 głosów
odpowiedź 7 kwietnia 2015 przez Iras Obywatel (1,800 p.)
#include <iostream>

using namespace std;

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

long int potega(int p, int w)
{
   if (w==0) return 1;
   else return p*potega(p,w-1);
}

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

long int silnia(int n)
{
   if (n==0) return 1;
   else return n*silnia(n-1);
}

int main()
{
    cout << f(3) << endl;
    cout<<potega(3,4)<<endl;
    cout<<fib(6)<<endl;
    cout<<silnia(6)<<endl;

    return 0;
}

Tutaj masz pare przykładów jak to robił pan Mirek, myśle że się przyda. Pozdrawiam :)

Podobne pytania

0 głosów
1 odpowiedź 271 wizyt
pytanie zadane 15 maja 2022 w PHP przez Jedenastka Początkujący (370 p.)
+1 głos
2 odpowiedzi 124 wizyt
0 głosów
1 odpowiedź 206 wizyt
pytanie zadane 16 grudnia 2019 w C i C++ przez Adam Kowalski Użytkownik (630 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

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

...