58.6函数的递归调用 在调用一个函数的过程中又出现直接或间接 地调用该函数本身,称为函数的递归调用 C语言的特点之一就在于允许函数的递归 调用。 2021/2/24
2021/2/24 6 §8.6函数的递归调用 在调用一个函数的过程中又出现直接或间接 地调用该函数本身,称为函数的递归调用。 C语言的特点之一就在于允许函数的递归 调用
个2人周要最他痛3代 岁 说E第1个人大 0岁。请向第5个人多米。后向第个大, age(5)=age(4)+2 ge(4)=age(3) ●age(3)=age(2) 2 o age(2)=age(1) +++ 2 ●age(1)=10 ●可以用数学公式表述如下: ●age(n)=10 (n=1) age(n-1)+2 (n>1) 2021/2/24
2021/2/24 7 例8.6.1 有5个人坐在一起,问第5个人多少岁?他说比 第4个人大2岁。问第4个人岁数,他说比第3个人大 2岁。问第3个人,又说比第2个人大2岁。问第2个 人,说比第1个人大2岁。最后问第1个人,他说是1 0岁。请问第5个人多大。 ⚫ age(5)=age(4)+2 ⚫ age(4)=age(3)+2 ⚫ age(3)=age(2)+2 ⚫ age(2)=age(1)+2 ⚫ age(1)=10 ⚫ 可以用数学公式表述如下: ⚫ age(n)=10 (n=1) ⚫ age(n-1)+2 (n>1)
8 ●可以用一个函数来描述上述递归过程: int age(intn)/*求年龄的递归函数* ●{intc;/*c用作存放函数的返回值的变量* f(n==1)c=10 else c=age(n-1)+2: return(c) 用一个主函数调用age函数,求得第5人的年龄。 ●# include< stdio.h> void main() pri n t f(%d", age(5))i 2021/2/24
2021/2/24 8 ⚫ 可以用一个函数来描述上述递归过程: ⚫ int age(int n) /* */ ⚫ { int c; /* c用作存放函数的返回值的变量 */ ⚫ if(n==1) c=10; ⚫ else c=age(n-1)+2; ⚫ return(c); ⚫ } ⚫ 用一个主函数调用age函数,求得第5人的年龄。 ⚫ #include <stdio.h> ⚫ void main() ⚫ { ⚫ printf(″%d″,age(5)); ⚫ }
58.7数组作为函数参数 1数组元素作为函数实参(略) 同普通变量作实参的方式相同 2数组名作函数参数 问题:多个返回值的处理? 解决方法一:在被调用函数内整个数组 经过计算处理完毕,再将整个数组返回给 原调用函数数组。 调用方式:在原调用函数的实参中,只 需写上数组名,后面不加[]在被调用函数 的形参中,数组名后面加上中括号[] 2021/2/24
2021/2/24 9 §8.7数组作为函数参数 ⚫ 1 数组元素作为函数实参(略)。 ⚫ 同普通变量作实参的方式相同。 ⚫ 2 数组名作函数参数 ⚫ 问题:多个返回值的处理? ⚫ 解决方法一:在被调用函数内整个数组 经过计算处理完毕,再将整个数组返回给 原调用函数数组。 ⚫ 调用方式:在原调用函数的实参中,只 需写上数组名,后面不加[ ];在被调用函数 的形参中,数组名后面加上中括号[ ]
8.72一维数组名作函数参数 10 数组名表示数组在内存中的起始地址。 例如:数组a在内存中从2000地址开始存放,则a的值 为2000。2000是地址值,是指针类型的数据(第8 中将介绍指针类型),不能把它看成是整型或其他 类型数据。 >实参是数组名,形参也应定义为数组形式,形参数 组的长度可以省略,但[不能省,否则就不是数组 形式了。 【例871】用冒泡法将10个整数排序。 2021/2/24
2021/2/24 10 8.7.2 一维数组名作函数参数 ➢ 数组名表示数组在内存中的起始地址。 例如:数组a在内存中从2000地址开始存放,则a的值 为2000。2000是地址值,是指针类型的数据(第8 中将介绍指针类型),不能把它看成是整型或其他 类型数据。 ➢ 实参是数组名,形参也应定义为数组形式,形参数 组的长度可以省略,但[ ]不能省,否则就不是数组 形式了。 【例8.7.1】用冒泡法将10个整数排序