递归中使用 foreach 中的 if-else-fi

递归中使用 foreach 中的 if-else-fi

给定一个大小为 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

但你可以记住他们,见 TiZ 手册(第 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它不是一个语句。

相关内容