μ»΄ν¨ν° κ³Όνμ μμ΄μ μ¬κ·(εζΈ, recursion)λ μμ μ μ μν λ μκΈ° μμ μ μ¬μ°Έμ‘°νλ λ°©λ²μ λ»νλ©°, μ΄λ₯Ό νλ‘κ·Έλλ°μ μ μ©ν μ¬κ· νΈμΆ(recursive call)μ ννλ‘ λ§μ΄ μ¬μ©λλ€.
κ³μΉμ ꡬνλ λ²μ μ¬κ·κ° κ°μ₯ λ§μ΄ μ΄μ©λλ μμ νλμ΄λ€. μ컨λ, Cλ‘ κ³μΉμ ꡬνλ λ°©λ²μ λ€μ μ½λμ κ°λ€.
unsigned int factorial(unsigned int n)
Β {
Β Β Β Β if (n <= 1)
Β Β Β Β Β Β Β Β return 1;
Β Β Β Β else
Β Β Β Β Β Β Β Β return n * factorial(n-1);
Β }
μ¦μ(ε½θͺ, an sich), λμ(ε°θͺ, fΓΌr sich), μ§μ(ζ’ζ, aufheben)μ ν μ¬μ΄ν΄μ ν€κ²μ λ³μ¦λ²μ ꡬμ±νλ€.
ν€κ²μ λ³μ¦λ²μ μ§μ λ¨κ³μμ μΌμ’
μ λΆλ³νλ κ°μΉλ₯Ό μμ νλλ° μ΄λ λ€μμ μ€λͺ
μ λΉλ¦¬κ² λ€:
19μΈκΈ° μμμ κ·Όλμ μΈ κΈ°μ , μ°μ
, μ λ, μ¬μ, λ¬Έν, νλ¬Έ λ±μ λ€λ₯Έ μ΄λ λ¬Έλͺ
보λ€λ μμ°μ μ΄κ³ λ₯λ₯ μ μ΄κ³ ν¨κ³Όμ μ΄μμΌλ©° λΆκ·Ήμ μμλΆν° λ¨κ·Ήμ μ μ΄λ₯΄κΈ°κΉμ§ λ¬Έλͺ
μ νμ€μΌλ‘ μ리μ‘μλ€. 맬μμ€ νΈλ©μ΄ νλ¦¬μΈ νλ²μ μ§μκ³ μ λ²μΌλ‘ ν΄κ²°λλ μ¬λ‘λ§ λ΄λ κΈ°μ‘΄ λκ²½μ¬νμλ μ°¨μμ΄ λ¬λΌμ‘λ€. κ·Έλ¦¬κ³ μ΄λ° μ λ‘μ μΈ μ±κ³΅μ νκΈν¨κ³Όλ λͺ©μ λ‘ μ μΈ μμ¬κ΄μ λ³μλ€. μμ¬λ μΌμ’
μ μκ° κ΄λ
μ΄λ€. μκ°μ λμμμ΄ μ΄μ΄μ§λ μκ°μ λ³νμ΄λ©° κ³Όκ±°μμ λ―Έλλ‘ νλ₯΄μ§ κ·Έ λ°λλ μλλ€. κ·Έλμ κ·Όλμ±μΌλ‘λΆν° λ―Έλλ μμΌλ‘ κ³Όκ±°μ λΉν΄ λμ± λ°μ νλ€λ λ°©ν₯μ±μ΄ μ겨λ¬λ€. κ·Έμ λ°λ₯΄λ©΄ μ΄λ ν λΆλ³νλ κ°μΉκ° μλ€λ©΄ κ·Έκ²μ μ΅μμ λ―Έλλ₯Ό ꡬμ±νλ μ건μ΄κ³ μ λμ μΈ κ°μΉμΈ κ²μ΄λ€. λ°λλ‘ λ§νλ©΄ ν¨λ°°μλ€μ μκ°μ μ λΆλΆ μ΄λκ°μ μ²λ°ν κ΅³μ΄ μλ κ·Έλ° κ²μ΄ λκ³ λ§μ΄λ€.
ν€κ²μ λ³μ¦λ²μ κ·Έλ¬λ―λ‘ μ°μμ μΈ μ¬μ΄ν΄μ μ΄λ£¨λλ° μ΄λ μκΈ° μμ μ μ μλ₯Ό μ°Έμ‘°νλ νμ, μ¦ μ¬κ·μ μΈ ννλ₯Ό κ°μΆλ€.
κ°λ Ή κ°μ°λ¬΄ν κ°μ κΈμμ μ ν μλ μμ°μ΄ λͺ
μ λ₯Ό 0μ μ μΈν μ μ μ§ν©μ μ μμ μμλ‘ μΌλμΌλμμμΌ°λ€κ³ κ°μ ν΄λ³΄μ. κ° μ μλ₯Ό νΉμ λͺ
μ μ κΈ°νΈλ‘ μ·¨κΈν λ μλμ κ°μ μ½λλ₯Ό μκ°ν΄λ³Ό μ μλ€.
int dialectics(int i);
int an_sich(int i);
int fur_sich(int i);
int aufheben(int !i);
int dialectics(int i) {
Β Β Β int result = an_sich(i);
Β Β Β if (result < 0 || result > 0) {
Β Β Β Β Β Β Β return dialectics(i || !i); Β
Β Β Β }
Β Β Β return 0
}
int an_sich(int i) {
Β Β Β return fur_sich(i); Β
}
int fur_sich(int i) {
Β Β Β return aufheben(!i);
}
int aufheben(int !i) {
Β Β Β return an_sich(i || !i); Β
}
int main() {
Β Β Β int result = dialectics(Z);
Β Β Β return result;
}
(μ μ½λλ μ΄ν΄λ₯Ό λκΈ° μν 보기μ΄λ©° κΈ λ΄μ©κ³Ό μ§μ μ μΈ κ΄λ ¨μ μμ΅λλ€. λν μ 무ν루ν μ¬κ·ν¨μλ μ±gptμ λμμ λ°μ μμ±ν κ²μΌλ‘ λΆμ ννκ±°λ μ‘°μ‘ν μ μμ΅λλ€.)
μ΄λ κ² μκΈ° μμ μ μ°Έμ‘°νλ μνμ μ¬κ·λ νλμ μ νμ²λΌ μ°λ‘보λ‘μ€λ₯Ό λ μ¬λ¦¬κ² νλ€.
꼬리λ₯Ό λ¬Όκ³ μλ λ±μ΄λΌλ κ³ λμ μμ§μ μνμ λν νλμ μνμ²λΌ μ°μ¬μλ€.
μ°λ‘보λ‘μ€κ° λμμ΄ μνν μ μλ μ΄μ λ 무μμΌκΉ?
κ·Έ μ΄μ λ μ€λ Ή μ€κ°μ μνμ΄ λκΈ°λλΌλ, λμ€μ λ€μ 머리μ κΌ¬λ¦¬κ° λ§λΏμΌλ©΄ μνμ λ€μ λΆννκΈ° λλ¬Έμ΄λ€.
μ¦, κ·Έ μ€λ¨λ§μ λ ν¬ν¨νλ μ¬κ·μ μνμ κ°μ νλ€λ©΄ μ°λ‘보λ‘μ€λ λμλ μνμΌ μ μλ€.
νμ§λ§ κ·Έκ²μ κ°μ μ μΈ κ²°λ‘ μΌ λΏμ΄κ³ 본격μ μΈ μκ° κ°κ°μ λμ
νλ©΄ μ΄μΌκΈ°κ° λ¬λΌμ§λ€.
μμ΄λ κΈ°μ€μΌλ‘ νμ¬ μμ μ μ¬κ·μ μνμ΄ μμ±λμλ€κ³ νλ€ κ·Έ μ κ³Όκ±° μμ μμλ κ·Έλ° λ―Έλμ λν΄ λ¬΄μ§ν κ²μ΄λ€.
λ―Έλλ₯Ό νμ¬μ²λΌ λ΄λ€λ³Ό μ μλ μΈκ°μ κ³ κΈ μ΄λ λλ μμ§ λͺ»νλ€.
νλ¬Όλ©° κ³Όκ±° μμ μμ κ·Έμ κ°μ μΆμμ κ°λ₯μ±μ΄ νμ μ μΈ κ²μ΄λΌλ 보μ₯μ μ΄λμ μλ¨ λ§μΈκ°?
κ·Έλ¬λ―λ‘ κ³Όκ±° μμ μ μ μλ λ―Ώμ μλ μλ λ―Έλλ₯Ό νμ¬ μμ μμ νμ μ§μ΄μ§ λ€μμΌ κ³Όκ±°μ λνμ¬ λ³΄μλ μκ°μ΄ μκΈ°κ² λλ€.
μ΄λ κ² μΆν μμ±λ λ΄λ¬ν°λΈλ₯Ό μκΈμ μ©, μ¦ μ¬νμ½λ°©λ¬Έν¨μΌλ‘μ¨ νλμ μνμ΄ μ±λ¦½νλ€.
ν€κ² λ³ΈμΈμ λ§λ§λ°λ, 'λ―Έλ€λ₯΄λ°μ λΆμμ΄λ ν©νΌμ΄ μ λ¬Όμ΄μΌ κ·Έ λ κ°λ₯Ό νΈλ€.'
...λΌλ κΈμ μ°λ μμμ ν΄λ΄€λλ° μ΄λ»κ² μκ°νμΈμ?
μΉλμλΌ μκ°λ¦¬