基本程序设计技术.ppt
《基本程序设计技术.ppt》由会员分享,可在线阅读,更多相关《基本程序设计技术.ppt(44页珍藏版)》请在优知文库上搜索。
1、1高级语言程序设计高级语言程序设计2第四章第四章基本程序设计技术基本程序设计技术3主要内容:基本程序设计技术主要内容:基本程序设计技术n循环程序设计循环程序设计n循环与递归循环与递归n基本输入输出基本输入输出n控制结构和控制语句控制结构和控制语句n程序设计实例程序设计实例n程序测试和排错程序测试和排错递归与循环递归与循环递归函数的执行过程递归函数的执行过程递归函数效率递归函数效率4n重复性计算可用重复性计算可用循环循环结构完成结构完成;n有些重复性计算,有些重复性计算,C中可用中可用递归递归完成完成;例:定义计算整数阶乘的函数:例:定义计算整数阶乘的函数:12(n-1)n乘的次数依赖于乘的次数
2、依赖于n,定义时不知道,每次用可能不同。,定义时不知道,每次用可能不同。程序的典型情况:计算程序的典型情况:计算“次数次数”依赖某些参数的值。依赖某些参数的值。4.2循环与递归循环与递归5计算整数阶乘的递推函数计算整数阶乘的递推函数long fact(long n) long i, f = 1; for (i = 2; i = n; +i) f *= i; return f;类型特征可定为:类型特征可定为: int fact(int)阶乘值增长极快(数学),更合适的类型特征:阶乘值增长极快(数学),更合适的类型特征: long fact(long)6nnnnn!()!10101.关于递归定义关
3、于递归定义n如果问题本身能用数学递归描述,可用递归定义解决如果问题本身能用数学递归描述,可用递归定义解决;nC允许递归定义:允许递归定义:在函数定义内调用被定义函数本身在函数定义内调用被定义函数本身。求阶乘的数学求阶乘的数学递归定义公式递归定义公式7n嵌套调用嵌套调用C规定:规定:函数定义不可嵌套函数定义不可嵌套,但,但可以嵌套调用可以嵌套调用函数函数main( )调用函数调用函数a结束结束a函数函数b函数函数调用函数调用函数b函数的嵌套与递归调用函数的嵌套与递归调用8定义:函数直接或间接的调用自身叫函数的递归调用定义:函数直接或间接的调用自身叫函数的递归调用f( )调调f调调f2调调f1f1
4、( )f2( )说明说明C编译系统对递归函数的自调用次数没有限制编译系统对递归函数的自调用次数没有限制每调用函数一次,在内存堆栈区分配空间,用于存放函数变量、每调用函数一次,在内存堆栈区分配空间,用于存放函数变量、返回值等信息,所以递归次数过多,可能引起堆栈溢出返回值等信息,所以递归次数过多,可能引起堆栈溢出int f(int x) int y,z; z=f(y); . return(2*z);int f1(int x) int y,z; z=f2(y); . return(2*z);int f2(int t) int a,c; c=f1(a); . return(3+c);递归调用递归调用9
5、构成递归需具备的条件构成递归需具备的条件n子问题须与原始问题为同样的事,且更为简单;子问题须与原始问题为同样的事,且更为简单;n不能无限制地调用本身,必须有个出口,化简不能无限制地调用本身,必须有个出口,化简为非递归状况处理。为非递归状况处理。10long fact (long n) return n = 0 ? 1 : n * fact(n-1);long fact(long n) long i, f = 1; if (n = 0) f = 1; else f = n * fact( n 1 ); return f;求阶乘的递归函数定义求阶乘的递归函数定义1:求阶乘的递归函数定义求阶乘的递归
6、函数定义2 :递归如何实现递归如何实现?11fact(3) 3*fact(2)fact(2) 2*fact(1)fact(1) 1*fact(0)fact(0)调用 fact(3)返回值 1返回值 1返回值 2返回值 6图 3.3fact(3)的计算过程计算中计算中fact被递归调用被递归调用的次数由实参确定。的次数由实参确定。考虑负参数值处理。可考虑负参数值处理。可改为:改为:n=1 ? 1 : .long fact(long n) long i, f; if (n = 0) f = 1; else f=n*fact(n-1); return f;12long fact(1)if (1 =
7、1) return 1;return 1 * fact(1 - 1);long fact(2)if (2 = 1) return 1;return 2 * fact(2 - 1);long fact(3)if (3 = 1) return 1;return 3 * fact(3 - 1);main() printf(“%d”, fact(3);蓝线蓝线:函数调用线路:函数调用线路绿线绿线:函数内部执行路线:函数内部执行路线红线红线:函数执行结束返回主调函数的路线:函数执行结束返回主调函数的路线long fact(long n) if (n = 1) return 1; return n * f
8、act(n - 1);13例例1 1 阅读源程序阅读源程序, ,写出运行结果。写出运行结果。#includelong f (int n) long s; if (n = 1) | (n = 2) s = 2; else s = n + f( n 1 ); return s; int main() long x; x = f (4); printf(“%ldn”, x); return 0;结果:结果:142.递归与计算过程递归与计算过程n包含递归的程序产生的计算过程和性质复杂,能完成很包含递归的程序产生的计算过程和性质复杂,能完成很复杂的工作。复杂的工作。q递归调用只有一个调用表达式或语句,但
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 程序设计 技术
