一.本周学习主要内容
本周,我们进一步学习了递归函数的使用,了解了递归函数的运行顺序。另外,还初步认识了数组。
二.递归函数
1.多次直接或间接调用函数本身。
2.使用递归函数必须要有递归出口,即需要有包含条件,来判断是否需要继续递归。
例如:
使用递归函数来计算前n项和。
#include <stdio.h> int sum( int n ); int main() { int n; scanf("%d", &n); printf ("%d\n", sum(n)); return 0; } int sum(int n) { if (n<=0) return 0; else if (n==1) return 1; else return sum(n-1)+n; }
tips:上述递归函数中,n<=0和n==1为此递归函数的结束条件,并且将这个出口值返回。
3.递归的缺点
①使用不当会导致堆栈溢出
②耗费时间可能很长,效率低下
4.递归的优化方法
①使用尾递归。
例如:使用递归函数求前n项的阶乘
#include <stdio.h> int fact(int n, int t); int main() { int n; scanf("%d", &n); printf ("%d\n",fact(n,1)); return 0; } int fact(int n, int t) { if (n<=0) return 0; else if (n==1) return t; else return fact(n-1,n*t); }
tips:使用一个t来保存某一项前一项的阶乘值,这样就避免了每次都要重复调用函数。
三.数组
小小知识点
1.数组的长度必须为最大下标+1;下标不能越界!!!
2.每次只能引用一个数组元素;
3.在定义数组时,若没有给出数组长度,系统会根据初值个数来判断数组长度。但是,最好不要忽略数组长度。
4.通常用for循环对数组进行遍历;