
Можно ли построить график рекурсивной функции с помощью \addplot
команды pgfplots?
Я попробовал так;
\documentclass{article}
\usepackage{pgfplots}
\pgfmathdeclarefunction{fac}{1}{
\pgfmathparse{(#1<=1)+
(#1>1)*#1*fac(#1-1)
}
}
\begin{document}
fac(5) is \pgfmathparse{fac(5)}\pgfmathresult
\end{document}
Однако результатом, по-видимому, является бесконечная рекурсия, поскольку вычисляется вся функция.
решение1
В итоге я последовал предложению Хайко Обердика и вычислял значения извне (в данном случае с помощью luacode, внутри LuaLatex):
\documentclass{article}
\usepackage{pgfplots}
\usepackage{luacode}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\begin{luacode*}
function fib(n)
local function inner(m)
if m < 2 then
return m
end
return inner(m-1) + inner(m-2)
end
return inner(n)
end
local points = "";
for i=0,15,1 do
points = points .. " (" .. i .. "," .. fib(i) .. ")";
end
tex.print("\\addplot [mark=none] coordinates { " .. points .. "};");
\end{luacode*}
\end{axis}
\end{tikzpicture}
\end{document}
Что дает следующее: