缺少数字,当使用 \If 而不使用 \EndIf 时,将被视为零,并带有 algpseudocode

缺少数字,当使用 \If 而不使用 \EndIf 时,将被视为零,并带有 algpseudocode

我正在尝试排版一个\If没有匹配\EndIfusing 的块的伪代码algpseudocode。这是我的 MWE:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage{geometry}
\usepackage{algorithm}
\usepackage{algpseudocode}

\begin{document}

    % Insert the algorithm
    \begin{algorithm}
        \caption{Compute some function by recursive algorithm}
        \begin{algorithmic}[1]
            \Function{$some$}{m,n}
            \If{$n=1$ \textit{or} $m=1$}
            \State \Return 1
            \Else
            \State \Return $some(n,m-1)+some(n-1,m)+some(n-1,m-1)$
            \EndFunction
        \end{algorithmic}
    \end{algorithm}
\end{document}

但是我得到了错误:missing number, treated as zero。我该怎么做才能使\If代码不匹配\EndIf

答案1

该错误是因为您缺少和\EndIf

algpseudocode包依赖于\If...\EndIf结构(像任何像样的语言一样)来跟踪代码的缩进。

如果不想显示 s \End,可以使用noend选项 for algpseudocode。不过,您必须使用\EndIfforalgpseudocode的内部簿记。

在此处输入图片描述

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage{geometry}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}

\begin{document}
    % Insert the algorithm
    \begin{algorithm}
        \caption{Compute some function by recursive algorithm}
        \begin{algorithmic}[1]
            \Function{$some$}{m,n}
            \If{$n=1$ \textit{or} $m=1$}
            \State \Return 1
            \Else
            \State \Return $some(n,m-1)+some(n-1,m)+some(n-1,m-1)$
            \EndIf % <- Here
            \EndFunction
        \end{algorithmic}
    \end{algorithm}
\end{document}

相关内容