深入理解函数——Linux C编程一站式学习

return语句

作用

有返回值的函数:是提供整个函数的返回值,并结束当前函数返回到调用它的地方。
无返回值的函数:检查到一个错误时提前结束当前函数的执行并返回。

int equal(int a,int b)
{
	if(a==b)
		return 1;
	else
		return 0;
}

理解
函数返回一个值相当于定义一个和返回值类型相同的临时变量并用return后面的表达式来初始化。
注意
如果返回变量时【return a】,这里返回的是变量的值而非变量本身。
习题
1、编写一个布尔函数int is_leap_year(int year),判断参数year是不是闰年。如果某年份能被4整除,但不能被100整除,那么这一年就是闰年,此外,能被400整除的年份也是闰年。

bool is_lesp_year(int year)
{
	if((year%4==0)&&(year%100!=0))
		return true
	else if(year%400==0)
		return true;
	else
		return false;
}

2、编写一个函数double myround(double x),输入一个小数,将它四舍五入。例如myround(-
3.51)的值是-4.0,myround(4.49)的值是4.0。可以调用math.h中的库函数ceil和floor实现这个函
数。

double myround(double x)
{
	if(x-floor(x)>=0.5)
		return ceil(x);
	else
		return floor(x);
}

增量式开发

增量即在软件开发过程中,先开发主要功能模块,再开发次要功能模块,逐步完善,最终开发出符合需求的软件产品。
优点
在实现的过程中可以不断测试主函数,及时发现错误并改正。

递归

如果定义一个概念需要用到这个概念本身,我们称它的定义是递归的。
自己直接或间接调用自己的函数称为递归函
数。
典型例子:n的阶乘是这样定义的:n的阶乘等于n乘以n-1的阶乘,递归实现:

int factorial(int n)
{
 if (n == 0)
 	return 1;
 else 
 	{
 	int recurse = factorial(n-1);
 	int result = n * recurse;
 	return result;
	}
}

调用递归函数时存储空间:数据结构称为堆栈或栈,随着函数调用和返回而不断变化的这一端称为栈顶,每个函数调用的参数和局部变量的存储空间称为一个栈帧。操作系统为程序的运行预留了一块栈空间,函数调用时就在这个栈空间里分配栈帧,函数返回时就释放栈帧。
注意

  • 在写递归函数时注意返回的条件是否会成立,否则这个函数就会永远调用下去,直到操作系统为程序预留的栈空间耗尽程序崩溃为止,这称为无穷递归
  • 递归次数取决于递归树,递归树取决于轴枢的选择。树越平衡,递归次数越少。
  • 对分区的长短处理顺序,影响的是递归时对栈的使用内存,而不是递归次数。

习题
1、编写递归函数求两个正整数a和b的最大公约数(GCD,Greatest Common Divisor),使
用Euclid算法:
1.如果a除以b能整除,则最大公约数是b。
2.否则,最大公约数等于b和a%b的最大公约数。

int GCD(int a,int b)
{
	if(a%b==0)
		return b;
	else
		return GCD(b,a%b);
}

2、编写递归函数求Fibonacci数列的第n项,这个数列是这样定义的:
fib(0)=1
fib(1)=1
fib(n)=fib(n-1)+fib(n-2)

int fib(int n)
{
	if(n==0||n==1)
		return 1;
	else.
		return fib(n-1)+fib(n-2);
}
发布了39 篇原创文章 · 获赞 4 · 访问量 1129

猜你喜欢

转载自blog.csdn.net/qq_41403559/article/details/104158969