在学习递归的过程中,我遇到了McCarthy 91函数,该函数返回所有整数自变量n <= 101的值91,并且n> 10的n - 10。 101。
int McCarthy(int n)
{
if (n > 100)
return n - 10;
return McCarthy(McCarthy(n+11));
}
int main()
{
printf(" %d ", McCarthy(45));
return 0;
}
我很想知道它在计算机科学中的意义是什么? Wikipedia文章说它被用作形式验证的测试用例。这是什么意思。?
有人可以为我简化其使用吗?
答案 0 :(得分:7)
想象一下,您正在编写一个C编译器,它接受您编写的程序并生成可执行代码。您想测试您的编译器是否正常工作。你创建了一个测试用例,它是你编写函数时递归定义的函数,并声明当你运行编译后的代码时,你会得到易于计算的结果(在这种情况下,程序应该输出91)。如果您开始编写用于编译递归调用的优化,那么这样的困难测试用例将特别有用。
图像不是编写编译器,而是编写一个试图编写证明的程序,就像在数学类中编写一样。程序的输入可能是一组转换,如用于编写证明的代数法则,以及程序试图证明的语句。计算机科学的这个分支称为形式验证。涉及McCarthy 91功能的陈述很难证明。例如(对于所有x <= 100,M(x)== 91)将非常难以证明。对于您的校对编写程序和转换来说,这将是一个非常难以解决的问题。