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