我想计算一个序列的递归项。以下代码使用斐波那契数列(当然,也可以是其他序列)完成此任务。
\documentclass[varwidth,border=5]{standalone}
\usepackage{tikz}
\usepackage{fp}
\usetikzlibrary{fixedpointarithmetic}
\usetikzlibrary{math}
\begin{document}
\tikzset{fixed point arithmetic}
\tikzmath{
function printfib(\i,\f){print {$f_{\i} = \f$\newline};};
function fibonacci(\n) {
int \a, \b, \res;
\a = 0; \b = 1;
if \n == 0 then { \res = \a; };
if \n == 1 then { \res = \b; };
if \n > 1 then {
for \i in {2,...,\n}{
\res = \a + \b;
\a = \b;
\b = \res;
};
};
return \res;
};
int \f, \i;
for \i in {0,1,...,10}{
printfib(\i,fibonacci(\i));
};
}
\end{document}
但是,我想将这些结果打印到包含两列的表中。第一列是 n 个值,第二列是序列的第 n 项。有人能帮我插入说明来执行此操作吗?换句话说,我提供 n 的值,我想获得一个包含序列的 n 个值的表格。非常感谢!
答案1
您可以使用tikzmath
来定义宏。 此类宏(如下\fib
例所示)可用于填充表格。 这是一个非常基本的表格,您可以使其更加精美,并可用于pgfplotstable
填充它。
\documentclass[varwidth,border=5]{standalone}
\usepackage{etoolbox}
\usepackage{tikz}
\usepackage{fp}
\usetikzlibrary{fixedpointarithmetic}
\usetikzlibrary{math}
\begin{document}
\tikzset{fixed point arithmetic}
\tikzmath{
function printfib(\i,\f){print {$f_{\i} = \f$\newline};};
function fibonacci(\n) {
int \a, \b, \res;
\a = 0; \b = 1;
if \n == 0 then { \res = \a; };
if \n == 1 then { \res = \b; };
if \n > 1 then {
for \i in {2,...,\n}{
\res = \a + \b;
\a = \b;
\b = \res;
};
};
return \res;
};
int \f, \i;
for \i in {0,1,...,10}{
\fib{\i}=fibonacci(\i);
};
}
\def\tmp{$n$ & $f(n)$\\ $0$ & $0$\\}%
\edef\iloop{0}%
\loop
\edef\iloop{\the\numexpr\iloop+1}%
\xappto\tmp{$\iloop$ & $\fib{\iloop}$}%
\gappto\tmp{\\}%
\ifnum\iloop<10\repeat
\begin{tabular}{cc}
\tmp
\end{tabular}
\end{document}