Svmmarivm
Fvnctio se ipsam vocare potest: recvrsio qvaestionem solvit eam ad minorem eivsdem qvaestionis instantiam redvcendo. Haec lectio definitiones recvrsivas mathematicae in C++ transfert (factoriale, potentiam, svmmam cifrarvm), singvlas cvm svo casv basis et svo casv recvrsivo; ostendit indvctionem earvm rectitvdinem et mensvram decrescentem earvm terminationem praestare; acervo vocationvm qvadra seqvitvr qvae congerantvr et dissolvantvr, et explicat qvando acervvs exhavriatvr. Limitem generis resvltati inspicit, qvod mvlto ante acervvm exvndat; versionem recvrsivam et iterativam nvmerorvm Fibonacci comparat vocationes nvmerando, et cvm criterio conclvdit ad eligendvm inter recvrsionem et circvitvm.
Proposita discendi
- Fvnctionem recvrsivam, cvm svo casv basis et svo casv recvrsivo, ex definitione recvrsiva scribere.
- Rectitvdinem et terminationem fvnctionis recvrsivae per indvctionem in magnitvdine qvaestionis ivstificare.
- Acervo vocationvm exsecvtionem fvnctionis recvrsivae seqvi et exvndationem acervi explicare.
- Svmptvm versionis recvrsivae et iterativae nvmerorvm Fibonacci comparare, earvm vocationes et operationes nvmerando.
Definitiones recvrsivae
Factoriale
Factoriale nvmeri natvralis est prodvctvm nvmerorvm natvralivm ab 1 ad : , cvm conventione . Pvncta svspensionis eivs formvlae circvitvm celant, et lectio Circvitvs docvit qvomodo scriberetvr. Atqvi eadem definitio aliam formam admittit, qvae nvllvm circvitvm memorat: factoriale ipsivs est vicibvs factoriale ipsivs , et factoriale nvmeri 0 est 1.
Haec est definitio recvrsiva: factoriale ipsivs per factoriale nvmeri minoris definit. Circvlaris non est, qvia qvaeqve applicatio secvndae regvlae gradvm vnvm descendit et scala in prima finitvr: . Dvae regvlae nomen habent. Prima est casvs basis, qvi resvltatvm dat ad nihil alivd referens; secvnda est casvs recvrsivvs, qvi qvaestionem ad minorem eivsdem qvaestionis instantiam redvcit.
C++ fvnctioni permittit vt se ipsam vocet, et hoc modo definitio fere verbvm pro verbo transfertvr.
#include <print>// Factoriale ipsivs n.// Praecondicio: 0 <= n <= 12 (margo infra ivstificatvr).// Postcondicio: reddit n! = 1 · 2 · ... · n, cvm 0! = 1.int factorial(int n){ if (n == 0) { return 1; // casvs basis } return n * factorial(n - 1); // casvs recvrsivvs}int main(){ for (int n{0}; n <= 6; ++n) { std::println("{}! = {}", n, factorial(n)); }}0! = 11! = 12! = 23! = 64! = 245! = 1206! = 720Fvnctio formam definitionis prorsvs habet: if qvod casvm basis tractat et return qvod casvm recvrsivvm adhibet. Vocatio factorial(n - 1) non differt a qvalibet alia vocatione lectionis Fvnctiones: eivs argvmentvm aestimatvr, novvm qvadrvm cvm svo n creatvr et, cvm finitvr, valor redditvs per n vocantis mvltiplicatvr.
Pactvm non est ornamentvm: cvm casvs recvrsivvs cvm vocaret, deinde cvm , nec vmqvam ad 0 perveniret; et in int non capitvr. Mvlti libri introdvctorii hoc factoriale cvm casv basis if (n == 0 || n == 1) scribvnt, svpervacvo sed innocvo, nec qvicqvam de negativis neqve de magnitvdine resvltati dicvnt: eorvm codex cvm non finitvr et resvltatvm absvrdvm a dat. Ambo vitia svo loco infra inspicientvr.
Casvs basis et casvs recvrsivvs
Omnis fvnctio recvrsiva vnvm vel plvres casvs basis habet, qvi directe solvvntvr, et vnvm vel plvres casvs recvrsivos, qvi eandem fvnctionem cvm argvmento aliqvo certo sensv minore vocant et id qvod reddit componvnt.
Potentia , cvm natvrali, per et definitvr: magnitvdo est exponens. Svmma cifrarvm nvmeri natvralis (illa nvmeri 2026 est ) sic definitvr: si , svmma est , qvia vnam tantvm cifram habet; sin minvs, est svmma cifrarvm ipsivs , qvod est sine vltima cifra, addita ea vltima cifra, . Hic magnitvdo est nvmervs cifrarvm.
#include <print>// x ad potentiam n elatvm.// Praecondicio: n >= 0.// Postcondicio: reddit x^n, cvm x^0 = 1.double power(double x, int n){ if (n == 0) { return 1.0; } return x * power(x, n - 1);}// Svmma cifrarvm decimalivm ipsivs n.// Praecondicio: n >= 0.// Postcondicio: reddit svmmam cifrarvm ipsivs n.int digitSum(int n){ if (n < 10) { return n; } return digitSum(n / 10) + n % 10;}int main(){ std::println("2^10 = {}", power(2.0, 10)); std::println("1.5^3 = {}", power(1.5, 3)); std::println("svmma cifrarvm nvmeri 2026: {}", digitSum(2026));}2^10 = 10241.5^3 = 3.375svmma cifrarvm nvmeri 2026: 10In digitSum, divisio integra n / 10 vltimam cifram avfert et n % 10 eam extrahit, vt in mvtatione basis lectionis Algorithmi nvmerici. Pro , fvnctio svmmam cifrarvm nvmeri 202 petit, qvae illam nvmeri 20 petit, qvae illam nvmeri 2 petit; haec casvs basis est et 2 reddit, et resvltata in reditv componvntvr: , , .
Fvnctionem recvrsivam scribere igitvr est dvabvs qvaestionibvs respondere: qvi casvs sine avxilio solvantvr, et qvomodo solvtio casvs ex solvtione minoris obtineatvr. Si ambo responsa recta svnt, fvnctio qvoqve recta est, et qvae seqvvntvr id demonstrant.
Argvmentvm oneratvr…