我写了以下伪代码:
\begin{algorithm}
\caption{Check if any player has won.}
\begin{algorithmic}[1]
\Procedure{isWin}{$Game$}
\ForAll{$seq \in \Call{getWinSeqs}{Game}$}
\For{$i \gets 0, length(seq) - 1$}
\If{$\not seq[i] = seq[i + 1]$}
break
\EndIf
\EndFor
\If{$seq[i + 1] = `X'$}
\Return `X'
\ElsIf{$seq[i + 1] = `O'$}
\Return `O'
\EndIf
\EndFor
\Return null
\EndProcedure
\end{algorithmic}
\end{algorithm}
渲染结果如下:
如图所示,finalreturn
直接放在 之后end for
。如何强制在 之后换行return
?
答案1
您正在使用algpseudocode
而不是algorithmicx
;重新定义\algorithmicreturn
问题\State
我还对您的代码做了一些改进。特别注意,否定符号是\lnot
,而\not
是不同的命令。
\documentclass{article}
\usepackage{algpseudocode}
\newcommand{\var}[1]{\mathit{#1}}
\newcommand{\qt}[1]{\mbox{`#1'}}
\algrenewcommand{\algorithmicreturn}{\State \textbf{return}}
\begin{document}
\begin{algorithmic}[1]
\Procedure{isWin}{$\var{Game}$}
\ForAll{$\var{seq} \in \Call{getWinSeqs}{\var{Game}}$}
\For{$i \gets 0, \mathrm{length}(\var{seq}) - 1$}
\If{$\lnot \var{seq}[i] = \var{seq}[i + 1]$}
break
\EndIf
\EndFor
\If{$\var{seq}[i + 1] = \qt{X}$}
\Return $\qt{X}$
\ElsIf{$seq[i + 1] = \qt{O}$}
\Return $\qt{O}$
\EndIf
\EndFor
\Return null
\EndProcedure
\end{algorithmic}
\end{document}