Portál AbcLinuxu, 12. května 2025 03:53
Řešení dotazu:
#include <iostream> int find_gcd(int a, int b) { return b == 0 ? a : find_gcd(b, a % b); } int main(int argc, char **argv) { int numerator = 6; int denominator = 4; int gcd = 1; while ((gcd = find_gcd(numerator, denominator)) != 1) { numerator /= gcd; denominator /= gcd; } std::cout<<numerator <<"/" <<denominator <<std::endl; return 0; }
find_gcd()
úplně zbytečně volat podruhé. Takže ten cyklus jen překáží, kdyby tam místo while
bylo napsáno if
, bude kód fungovat také a navíc bude efektivnější.
Vy mě fakt jednou zabijete!while ((gcd = find_gcd(numerator, denominator)) != 1)
Takže ten cyklus jen překáží, kdyby tam místo while bylo napsáno if, bude kód fungovat také a navíc bude efektivnější.Ale nebude splněno zadání Pomocí cyklu while…
find_gcd()
místo machrování s rekurzí a doufání, že z ní překladač ten cyklus udělá…
gcd = 1
inicializovaná na hodnotu 1? Vždyt se v cyklu pořád přepisuje.
ok, pro pevně dané hodnoty jednoho zlomku
Pro kterékoli hodnoty.
Ale stejně mi není jasné proč je ta proměnná inicializovaná zrovna na jedničku.
Ono je úplně jedno, na co je inicializovaná (a jestli vůbec), protože první použití té proměnné je stejně přiřazení do ní. Takže nemá ani smysl hloubat nad tím, proč ta či ona hodnota.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.