据说是MIT的编程入门书,不得不感慨这才是真的编程入门书,而不是语言书,他讲的都是编程语言的基本概念。同时也意识到写程序也应该惜墨如金。
recursive process 和 iterative process
int factorial(int n)
{
if(n == 1) return n;
else return n * factorial(n-1);
}
int factorial_iter(int counter, int n, int result)
{
if(counter > n) return result;
else return factorial_iter(counter+1, n, counter*result);
}
int factorial(int n)
{ return factorial_iter(1, n, 1); }
这两个不都是递归函数吗?他们是递归函数,但是他们的思考方式是不一样的。上面的函数定义是以里面的factorial能得到所要结果为假设写出来的,他称为recursive process。下面的函数看似递归,实际上是在维护程序运行的状态。两种写法实际上基于机器计算的两个等价但是内容非常不一样的理论基石:lambda演算和图灵机。