LaTeX3를 가지고 피보나치 수열 생성 함수를 만들어봤습니다.
꼬랑지 재귀가 잘 될는지 궁금해서 해본 것인데 뭐... 대략 잘 되는 듯요.
\fibo_iter:nnn 함수의 마지막에 자기 자신을 다시 호출하고 있습니다.
들리는 소문에 모 회사의 입사시험 문제였다고도 하는데, 설마 LaTeX으로 이걸 풀면 점수 줄까나요?
하는 김에 expl3에 있는 floating point 데이터타입을 이용해서 인접한 항의 비를 구했습니다. 황금비로 수렴해가는 거랍니다.
\cs_new:Npn \fibo_iter:nnn #1 #2 #3
{
\int_compare:nTF { #1 = 0 }
{
\int_set:Nn \output_int { #2 }
}
{
\fibo_iter:nnn { \int_eval:n { #1 - 1 } } { #3 } { \int_eval:n { #3 + #2 } }
}
}
\NewDocumentCommand \fibo { m }
{
\fibo_iter:nnn { #1 } { 0 } { 1 }
$\mathrm{F}\c_math_subscript_token {#1} = \int_use:N \output_int$
}
말하자면, 다음과 같은 코드의 expl3 판입니다.
\makeatletter
\newcount\outputcnt
\long\def\fibo#1{%
\@fibo{#1}{0}{1}%
$f_{#1} = \the\outputcnt$ \par
}
\def\@fibo#1#2#3{%
\ifnum0=#1
\outputcnt=#2
\else
\@fibo{\numexpr#1-1\relax}{#3}{\numexpr#3+#2\relax}%
\fi
}
\makeatother
KTUG 한국 텍 사용자 그룹