给定一个大小为 n 的数字列表,将形成 n-1 种组合。将每个组合的数字相乘,并将所有乘积相加。这取自问题 711870。递归在纸上有效。问题是以下开发中的错误在哪里。感谢您的时间。
\documentclass[10pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[left=2.5cm, right=1.5cm, top=2.5cm, bottom=1.5cm]{geometry}
\usepackage[spanish]{babel}
\usepackage{mathtools, amssymb, amsthm}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\foreach \i [count=\Mc] in {3,5,7}{ %--
\ifnum \Mc<2
\let\M=1
\let\N=\i
\node at (0,\Mc){M=\M, \quad N=\N, posición=\Mc, Valor=\i};
\else
\pgfmathparse{\i*\M+\N}
\pgfmathsetmacro{\M}{\pgfmathresult}
\pgfmathsetmacro{\N}{\i*\N}
\node at (0,\Mc){M=\M, \quad N=\N, posición=\Mc, Valor=\i};
\fi
};
\end{tikzpicture}
%----------------------------------------------------
\end{document}
答案1
中的任何循环\foreach
都是以组的形式执行的,因此您会丢失\M
和的值\N
。
但你可以记住他们,见 Ti钾Z 手册(第 1005 页)有关/pgf/foreach/remember
,因此无需进行全局分配(至少在这种情况下),否则可能会破坏现有命令。
\documentclass[10pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\foreach \i [
count=\Mc,
remember=\M as \lastM (initially 1),
remember=\N as \lastN (initially \i),
] in {3,5,7}{
\ifnum \Mc<2
\pgfmathsetmacro{\M}{\lastM}
\pgfmathsetmacro{\N}{\lastN}
\else
\pgfmathsetmacro{\M}{\i*\lastM+\lastN}
\pgfmathsetmacro{\N}{\i*\lastN}
\fi
\node at (0,\Mc){M=\M, \quad N=\N, posición=\Mc, Valor=\i};
}
\end{tikzpicture}
\end{document}
请注意,您不需要在 , 的右括号后添加分号\foreach
,因为\foreach
它不是一个语句。