本人愚笨,被译书中“计算过程”与“过程”弄晕了都毫不知情。process 在译书中被译为:“计算过程”;procedure被译为:“过程”。而 process 有时又译为“过程”。
process 与 procedure 在本书中的区别
process 是程序在计算机中的处理过程。见译书的第1页第1段第1行:“计算过程(computational process)是存在于计算机里的一种抽象,在其演化发展中,这些过程(process)会去操作另外被称为数据(data)的抽象事物。”。
procedure 是对 process 用编程语言来进行描述,也就是程序的源码。见译书第3页第1行:“计算过程的Lisp描述,称为过程(procedures)”。
弄清两者的区别后,继续阅读 1.2 节的递归 process 与递归 procedure。
p.s. TopLanguage群组中有高手在谈 programming 翻译为“编程”?“程序设计(program design)”?一样有意思。有争论就有进步嘛。
线性递归
线性递归与树形递归相区别,不同点可以看累加、阶乘实例。关于“递归”的知识,下面引用Dexter.Yy的《递归与递推:JavaScript在斐波那契数的尾递归方法》中的:
Ackermann(阿克曼)函数是以德国数字家阿克曼命名的函数,它是线性递归中线性增长较快的一种。在网上有习题 1.10 的答案
下面是用JavaScript改写的程序实现:
function A(x,y)
{
if(y==0)
{
return 0;
}
if(x==0)
{
return 2*y;
}
if(y==1)
{
return 2;
}
else{
return arguments.callee(x-1,arguments.callee(x,y-1));
}
}
用C#语言的程序实现:
using System;
class TestCase
{
static int A(int x, int y)
{
int sum = 0;
if(y==0)
{
return sum;
}
if(x==0)
{
sum = 2*y;
return sum;
}
if(y==1)
{
sum = 2;
return sum;
}
else
{
sum = A(x-1, A(x, y-1));
return sum;
}
}
static void Main()
{
Console.Write(A(1, 10));
}
}