第一章主要讲的是数学知识的复习,指数,级数什么的,最后,浅层次的谈了一下递归。
当一个函数用它自己来定义时就称为是递归(recursive)的,C语言是允许递归的。但重要的是要记住,C提供的仅仅是遵循递归思想的一种企图。不是所有的数学递归函数都能有效地或者正确地由C的递归模拟来实现。
举个递归的小例子:
int x
F(int X)
{
if(0 == X)
return 0;
else
return 2*F(X-1)+X*X;
}
关于递归,有几个重要并且可能会被搞混的地方。一个常见的问题是:它是否就是循环逻辑?答案是:虽然我们定义一个函数用的是这个函数的本身,但是我们并没有用函数本身定义该函数的一个特定的实例。换句话话说,通过使用F(5)来得到F(5)的值才是循环的。通过使用F(4)得到F(5)的值不是循环的,除非F(4)的值又要用到对F(5)的计算。
递归的前两个基本法则:
1.基准情形:你必须总要有某些基准的情形,它们不用递归就能求解
2.不断推进:对于那些需要递归求解的情形,递归调用必须总能朝着生产基准情形的方向推进。
给大家讲一个简单易懂的例子:
我们考虑一本大字典,词典中的词都是用其他的词定义的。当我们查一个单词时候,我们不理解对该词的解释,于是我们不得不再查一些解释中的词。而对这