以递归方式打印文本

以递归方式打印文本

我正在编写一个用于计算阿克曼函数的递归命令。在整个计算过程中,我想打印出一些文本。但是,我无法这样做。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}

\newcommand{\ackermann}[2]{
    \ifnum#1=0
        % case1
        % comment me in
        \the\numexpr(#2+1)\relax
    \else
        \ifnum#2=0
            % case 2
            % comment me in
            \ackermann{\the\numexpr(#1-1)\relax}{1}
        \else
            % case 3
            % comment me in
            \ackermann{\the\numexpr(#1-1)\relax}{\ackermann{#1}{\the\numexpr(#2-1)\relax}}
        \fi
    \fi
}


\begin{document}

\ackermann{2}{2}

\end{document}

以上是我使用的 MWE。按原样使用时,它会按预期工作,但是当您取消注释其中一条%comment me in注释时,它突然开始出现问题,我不明白为什么会这样。有人可以向我解释一下这种行为吗?

答案1

您的测试\ifnum#2=0假设#2扩展为一个数字,但在第二次递归调用中,#2如果\ackermann{#1}{\the\numexpr(#2-1)\relax}您取消注释,则comment me in会有一个以 开头的扩展,c因此您会收到错误

! Missing number, treated as zero.
<to be read again> 
                   c

相关内容