这几天过节,喝大了几次玩了几个通宵,不过还是抽出时间看看书,好孩纸啊,~
第五章 操作符和表达式
第六章 指针
注意几点:1)指针变量并非它所指向的内存地址所存储的值,需要用间接访问 * 来获得它;2)声明一个指针变量并不会给自动分配内存,所以在访问指针前指针必须进行初始化,或者让它指向现有的内存,或者给它分配动态内存;3)NULL指针表示不指向任何值,间接访问它往往返回内存位置为0的值以及终止程序。
第七章 函数
递归的执行过程固然重要,但在掌握递归地推(压栈)和回归(出栈)的工作原理之后,就不要纠缠这些问题了,把精力放在关注收敛条件和递归函数设计上吧!要相信递归函数能顺利完成任务的。另外,不要被递归函数的清晰思路所诱惑,因为同样的问题(阶乘、斐波那契数等),递归的代价要远比其它方法(循环、迭代)大,因为正如你所知道的那样,递归的每次压栈都要讲中间计算结果存储在内存空间上。
当然,你也许会说现在硬件的开销不再是问题,内存的花费代价远小于因思路混乱带来的烦恼,也罢。但需要知道的是,优秀的程序员是以代码有效和高效为己任的!
/*斐波那契数-递归实现*/
long fibonacci(int n)
{
if( n <= 2)
return 1;
return fibonacci( n - 1) + fibonacci( n - 2);
}
/*
**用迭代方法计算第n个斐波那契的值
*/
long fabonacci( int n)
{
long result;
long previous_result;
long next_older_result;
result = previous_result = 1;
while( n > 2)
{
n--;
next_older_result = previous_result;
previous_result = result;
result = previous_result + next_older_result;
}
return result;
}