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

[Python] szybkie podnoszenie do potęgi

VPS Starter Arubacloud
0 głosów
1,137 wizyt
pytanie zadane 4 czerwca 2023 w Python przez wojtek_programista Nowicjusz (170 p.)

Dzień dobry,

aktualnie uczę się Pythona i dla treningu postanowiłem napisać program rekurencyjnego szybkiego podnoszenia do potęgi. Podczas gdy algorytm działa bezproblemowo w C++, w Pythonie pojawia się błąd o treści "maximum recursion depth exceeded in comparison" . Bardzo prosiłbym o wytłumaczenie dlaczego tak się dzieje. Poniżej kod w obu językach.

def potega(x, n):
    if n == 1:
        return x
    else:
        p = potega(x, n / 2)
        if n % 2 == 1:
            return x * p * p
        else:
            return p * p


base = int(input("podaj podstawę: "))
power = int(input("podaj potęgę: "))
print(potega(base, power))
#include <iostream>

using namespace std;

long int potega(int x, int n)
{
    if(n==1) return x;
    else
    {
        long int p=potega(x, n/2);
        if(n%2==1) return x*p*p;
        else return p*p;
    }
}

int main()
{
    int x,n;
    cin>>x; cin>>n;
    cout<<potega(x,n);
    return 0;
}

 

1
komentarz 4 czerwca 2023 przez adrian17 Ekspert (348,220 p.)

szybkiego podnoszenia do potęgi

Jakby co, dla formalności (bo wiem że ten kod napisałeś w celach edukacyjnych) ale dodam: w Pythonie potęgowanie możesz zrobić `x**n` i to będzie szybsze od czegokolwiek co napiszesz z ręki ;)

komentarz 4 czerwca 2023 przez wojtek_programista Nowicjusz (170 p.)
Tak, zdaję sobie z tego sprawę, jednak w szkołach wciąż nas uczą takich rzeczy :P

1 odpowiedź

+1 głos
odpowiedź 4 czerwca 2023 przez adrian17 Ekspert (348,220 p.)
Nie pokazałeś dla jakiego wejścia się tak dzieje, ale zakładam, że:

wypisz sobie wartość `n` w każdej iteracji rekursji (i na przyszłość, rób takie testy od razu ;D ). Zobaczysz pewnie liczby po przecinku? Tak więc powinieneś był użyć dzielenia całkowitego // zamiast dzielenia liczb rzeczywistych.
komentarz 4 czerwca 2023 przez wojtek_programista Nowicjusz (170 p.)
Dziękuję bardzo, uwagi zapamiętam.

Podobne pytania

92,839 zapytań

141,780 odpowiedzi

320,848 komentarzy

62,171 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

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!

...