今天带大家巩固一下函数的知识点。
一、返回信息的函数
顾名思义,这类函数的效果就是返回一个变量,通俗点说整个函数就是一个变量。这种函数一般都是自制函数,官方的一般都是用CMath库里的函数,如:
cout<<abs(n); //这行代码的效果是输出n变量的绝对值
注意:这类函数不能单独成行!
abs(n); //这行代码是一个错误案例,它什么都不能完成
n=abs(n); //这才能起到作用
/*把abs(n)单独成行,就好像在一行上放了一个1一样,没有用处*/
二、只是单纯地做事的函数
这类的官方函数比较多,cout cin for if等大家熟知的函数都属于这一类。
与返回变量的函数不同,这类函数没有返回值,因而它可以单独成行。
下面是一个典型的例子:
for(,,){break;} //Q:这个循环循环了几次?
三、自定义函数
自定义函数并非官方给的,而是我们自己通过拼接官方函数和各种运算制造出来的。
1. 定义
自定义函数的定义可参照一个公式:
返回值种类 /*如int,string等,没有返回值填void*/ (参数1种类 参数名,参数2种类 参数名 /*也可以只有一个参数或更多参数*/){
代码
return 返回值;//返回值需与上面的返回值种类对应;如果是void则不用填返回值,或也可以直接把return省略掉
}
以下是一个有返回值的实例:
int add(int a,int b){
int c=a+b;
return a+b;
}
相应的,以下是一个无返回值的实例:
void output(string n){
cout<<n;
//return;
}
2. 引用
首先,大部分引用的注意事项已经讲过了,在此不多赘述。此处重申一下递归:
(1) 直接递归
直接递归指自己直接引用自己,如:
int add(int n){
if(n==1) return n;
return n+add(n-1);
}
注意:第2行的判断被称为递归边界。如果没有递归边界,递归将成为一个死循环。
(2) 间接递归
间接递归指多个函数互相循环引用,如:
int a(int n){
if(b(n)==0) return n;
return n+b(n-1);
}
int b(int n){
if(a(n)==0) return n;
return n+a(n-1);
}
此处因为n的奇偶性不定,因此设置了两个边界判断(第2行和第6行)来确保结果的准确性。如果不这么设置,结果可能会比真正的结果少1。
四、函数和递归的用途
一般来说,在做题时复杂的算法都会放进函数里。反正我是这么做的
递归则更为重要,dp大部分都要用递归,别的算法也多多少少涉及一点。
五、小结
总而言之,函数在各种算法中显得尤为重要,尤其是对递归的使用。
希望这篇文章能帮到你。