Ad argvmentvm transi
Topos Uranos

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

  1. Fvnctionem recvrsivam, cvm svo casv basis et svo casv recvrsivo, ex definitione recvrsiva scribere.
  2. Rectitvdinem et terminationem fvnctionis recvrsivae per indvctionem in magnitvdine qvaestionis ivstificare.
  3. Acervo vocationvm exsecvtionem fvnctionis recvrsivae seqvi et exvndationem acervi explicare.
  4. Svmptvm versionis recvrsivae et iterativae nvmerorvm Fibonacci comparare, earvm vocationes et operationes nvmerando.

Definitiones recvrsivae

Factoriale

Factoriale nvmeri natvralis nn est prodvctvm nvmerorvm natvralivm ab 1 ad nn: n!=1⋅2⋯nn! = 1 \cdot 2 \cdots n, cvm conventione 0!=10! = 1. Pvncta svspensionis eivs formvlae circvitvm celant, et lectio Circvitvs docvit qvomodo scriberetvr. Atqvi eadem definitio aliam formam admittit, qvae nvllvm circvitvm memorat: factoriale ipsivs nn est nn vicibvs factoriale ipsivs n−1n - 1, et factoriale nvmeri 0 est 1.

0!=1,n!=n⋅(n−1)!(n≥1).0! = 1, \qquad n! = n \cdot (n - 1)! \quad (n \geq 1).

Haec est definitio recvrsiva: factoriale ipsivs nn per factoriale nvmeri minoris definit. Circvlaris non est, qvia qvaeqve applicatio secvndae regvlae gradvm vnvm descendit et scala in prima finitvr: 3!=3⋅2!=3⋅2⋅1!=3⋅2⋅1⋅0!=63! = 3 \cdot 2! = 3 \cdot 2 \cdot 1! = 3 \cdot 2 \cdot 1 \cdot 0! = 6. 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.

ExemplvmFactoriale recvrsivvm
Programma in C++
#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));    }}
Exitvs
0! = 11! = 12! = 23! = 64! = 245! = 1206! = 720

Fvnctio 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 n=−1n = -1 casvs recvrsivvs cvm −2-2 vocaret, deinde cvm −3-3, nec vmqvam ad 0 perveniret; et 13!13! 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 n<0n < 0 non finitvr et resvltatvm absvrdvm a 13!13! 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 xnx^n, cvm nn natvrali, per x0=1x^0 = 1 et xn=x⋅xn−1x^n = x \cdot x^{n - 1} definitvr: magnitvdo est exponens. Svmma cifrarvm nvmeri natvralis nn (illa nvmeri 2026 est 2+0+2+6=102 + 0 + 2 + 6 = 10) sic definitvr: si n<10n < 10, svmma est nn, qvia vnam tantvm cifram habet; sin minvs, est svmma cifrarvm ipsivs ⌊n/10⌋\lfloor n / 10 \rfloor, qvod est nn sine vltima cifra, addita ea vltima cifra, n mod 10n \bmod 10. Hic magnitvdo est nvmervs cifrarvm.

ExemplvmPotentia et svmma cifrarvm
Programma in C++
#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));}
Exitvs
2^10 = 10241.5^3 = 3.375svmma cifrarvm nvmeri 2026: 10

In digitSum, divisio integra n / 10 vltimam cifram avfert et n % 10 eam extrahit, vt in mvtatione basis lectionis Algorithmi nvmerici. Pro n=2026n = 2026, 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: 2+0=22 + 0 = 2, 2+2=42 + 2 = 4, 4+6=104 + 6 = 10.

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.