C++两个函数可以相互递归吗_C++入门:函数

什么是函数?

一般呢,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,我们就把x称为自变量,把y称为因变量,y是x的函数。

ae95a0fdf46baee7093245eee58104f6.gif

说函数,不得不说 function,英文中 function,有完成一定功能,起作用的意思。所以在程序设计中,function 一词更应该理解成这段代码完成某种功能。

数学是理论科学,计算机程序是应用科学,计算机程序里面的函数概念继承自数学,在数学上,输入、数据处理、输出,这三者缺少任何一个都是没有意义的,而在计算机程序里可以设计成什么都不做。

01 对于一个 C 程序而言,它所有的命令都包含在函数内。每个函数都会执行特定的任务,每个函数都只能被定义一次,但一个函数可以根据需要被多次的声明和调用。 在之前的教程中,我们会看到所有的代码都要写在int main() 的花括号里。这个main就是一个函数,是程序启动后第一个被执行的函数。当我们执行一个编译好的C++程序时,程序会直接找到main函数,顺序执行里面的每一条语句。如果缺失了main函数,编译时就会报错。 其他所有函数都是 main()函数的子函数(或者与之相关联的过程,例如回调函数),并且它们的函数名称可以自己设定。 现在我们通过一个小例子看一下,输入两个整数,输出它们的和。
#includeusing namespace std;int main(){  int a,b,c;  cin>>a>>b;  c=a+b;  cout<  return 0;  }
上面是我们开始接触的最基本的写法,那么利用函数的话可以这样写:
#includeusing namespace std;int sum(int a,int b){  return a+b;}int main(){  int a,b,c;  cin>>a>>b;  c=sum(a,b);  cout<  return 0;    }

我们看到在main()下,cout输出的c的结果变成了sum(a,b),而不是前面的a+b。这里就是对自定义函数sum的调用,我们从sum函数获取结果。

C++中,函数可以看作一种独立的模块是将重复出现的一些程序整理成独立的模块。在需要使用的时候只需要调用这些模块,而不需要将这些程序再重新写一遍这样就减少了代码数量,并且让程序的维护更加轻松

简单说,函数(function)就是一段程序语句的集合,并且给一个名字来代表此程序代码的集合。

02

C++中自定义函数分为声明和定义两部分。

声明是指:事先告诉编译器这个函数是存在的,并说明相关的信息(函数类型、参数数量、参数类型)。

定义是指:对函数功能的代码描述。

因为C++中程序开始执行是从main()函数开始的,所以我们在main()函数中调用其他函数分两种情况:

1、调用的函数在main()函数之前定义

2、调用的函数在main()函数之后定义

第一种在调用之前定义的函数不需要声明,第二种在调用之后才定义的函数则需要进行声明,否则会出现编译错误。但是由于在编写程序的过程中,我们有时候很难时刻关注函数的位置,因此我们一般习惯上都要对每个自定义函数先进行声明,然后才去定义调用。

如下面这样,不做声明,是无法编译的。

#includeusing namespace std;int main(){  int a,b,c;  cin>>a>>b;  c=sum(a,b);  cout<  return 0;    } int sum(int a,int b){  return a+b;}

自定义函数的声明语法格式如下:

返回值类型 函数名(数据类型 参数1,数据类型2 参数2,……);

返回值类型 函数名(数据类型,数据类型2,……);

声明部分可以省略大括号,直接以“;”结尾。其中参数名可写可不写。例如:

int sum(int n1,int n2);int sum(int , int);

一个完整的函数分为这么几部分:

函数返回类型,函数名,参数,函数体,返回值。如下面函数,其中int是函数返回值类型,sum是函数名,c是返回值,int a,b是参数,花括号为函数体。

int sum(int a,int b){  int c=a+b;  return c;}

这里特别注意一下void类型的函数可以省略return语句,其余类型则必须至少含有一个return语句为调用处提供返回值,下面有个小例子。

接下来就是函数的调用,函数的调用就是如何使用函数。在调用函数的时候,需要按照函数定义好的参数数量以及参数类型去传递对应的参数。

语法格式如下:  

函数名(参数1,参数2,……); 

若函数是无参函数,不需要传递参数或者在小括号写上void  函数名();或函数名(void);  若有返回值,就可以使用赋值运算符“=”将返回值赋给变量。

变量 = 函数名(参数1,参数2,……);

所以上面的代码如果把函数放在main()函数之后的话可以这样写:

#includeusing namespace std;int sum(int a,int b); //函数sum的声明int main(){  int a,b,c;  cin>>a>>b;  c=sum(a,b);//函数sum的调用  cout<  return 0;    } int sum(int a,int b)//函数sum的定义 {  return a+b;}
在函数中也可以直接输出,如上面的代码可以修改为:
#includeusing namespace std;void sum(int a,int b); //函数sum的声明int main(){  int a,b;  cin>>a>>b;  sum(a,b);//函数sum的调用  return 0;    } void sum(int a,int b)//函数sum的定义 {  cout<< a+b;}

这里简单提一下函数的嵌套调用和递归调用,嵌套调用指的是函数里面调用另一个函数,刚才我们在main函数调用max函数就是一个嵌套调用行为。仔细阅读下面例子,思考为什么函数a()要放到函数b()后面,如何避免?

#includeusing namespace std;int b(){  return 2020;}int a(){  return b();}int main(){  cout<  return 0;    }

递归调用则是指的函数自身调用自身的情况,比如我们需要计算n的阶乘,我们可以循环也可以利用函数递归调用。当然递归一定不要忘记设置递归终止,否则就可能出现死循环了。

#includeusing namespace std;int fact(int n);int main(){  int a;  cin>>a;  cout<  return 0;    } int fact(int n){  if(n==0 || n==1) return 1;  //设定递归终止  else return n*fact(n-1);  //递归调用}
03

最后说一下内置函数,在 C++ 中,除了可以创建各种函数,还包含了各种有用的函数供您使用,这些函数写在标准 C 和 C++ 库中,叫做内置函数。

如数学函数,头文件cmath或math.h中包含的常用数学函数。math.h是C语言的头文件,因为C++兼容C所以在C++中用math.h也是可以的。不过推荐的是使用#include ,总归你学C++不是,其中的函数和使用方法几乎完全相同。

0c3b27eb4a7f9f8435b164a9b5afb9e3.png

在NOI竞赛中,C++程序禁止使用内嵌汇编和以下划线开头的库函数或宏(自己定义的除外),可以使用STL中的模板。所以小伙伴在学习时可以多少了解一下,比如STL提供了两个用来计算排列组合关系的算法,分别是next_permutation和prev_permutation,挺香的~     「您的每一个  对我们都是鼓励」 8a5bbe5242aae9e93615c997df1ed917.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值