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

Prosta funkcja do napisania

VPS Starter Arubacloud
+3 głosów
428 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ź 250 wizyt
pytanie zadane 15 maja 2022 w PHP przez Jedenastka Początkujący (370 p.)
+1 głos
2 odpowiedzi 116 wizyt
0 głosów
1 odpowiedź 203 wizyt
pytanie zadane 16 grudnia 2019 w C i C++ przez Adam Kowalski Użytkownik (630 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...