在上一章,我们已经初步了解了关于函数的一些知识。另外提一嘴,函数有多个参数时,一般使用逗号分隔开,不管是定义函数还是调用函数。
那么,接下来,我们继续学习函数。
首先先说一点,上期的代码太乱了,本期决定减少出现的编程语言,只出现根据tiobe语言排行榜当下最流行的四门编程语言:python,C++,C,Java,其中C/C++我们会放在一起讲,作为代码片段/半成品用的语言。完整代码会出现以上所有四种编程语言。
分段函数
如何在编程里实现这个函数呢?
很明显,我们需要先对参数进行条件判断,在大于等于0时和小于0时返回不同的值。
这里就要用到条件语句if了
int f(int x){
if(x>=0){
return x;
}
else{
return x+1;
}
}// C/C++,Java
def f(x:int)->int:
if x>=0:
return x
else:
return x+1;
#python
函数在运行到return语句时,就会直接退出并返回值。因此,在return语句后面的所有内容都会被忽略。
因此,下面这么写也是可以的
int f(int x){
if(x>=0){
return x;
}
return x+1;
}// C/C++
上面的代码中,如果x≥0,函数执行return x;并忽略后面的renturn x+1;,如果x<0才会执行return x+1;
即便函数的返回值为void,在大部分编程语言中,也可以使用return ;来结束函数
void f(int x){
if(x<0){
return ;
}
printf("Hello World");
}// C/C++
def f(x:int):
if x<0:
return
print("Hello World")
#python
课后作业1:这两个函数在x为什么时才会输出Hello World?
抽象函数
怎样在编程里实现这个函数呢?
首先可以看到,f(0)=0,因此我们可以先用if语句来让x=0时,函数返回0
int f(int x){
if(x==0){
return 0;
}
}// C/C++,注意编程语言中判断相等是两个等于号==,一个等于号是赋值!!!
其次,f(x)=f(x+1)-1,那么我们只需要知道f(x+1)的值,就能知道f(x)的值
当x=-1时,f(x+1)就是f(0),等于0,再减去1就能得到f(-1)的值。
类似的,我们还能得到f(-2),f(-3),……
这样,当x<0时,要计算f(x),我们可以先计算f(x+1),计算f(x+1),可以先计算f(x+2),以此类推,最终总能找到f(0),再依次减一即可
int f(int x){
if(x==0){
return 0;
}
else if(x<0){
return f(x+1)-1;
}
}// C/C++
像这种在函数里调用自己的行为,我们称为递归
但是,如果x>0,那么无论执行多少次x+1,都不可能变成0,这个函数就会无限递归下去,直至电脑带不动为止。
不过,我们可以假设输入的不是x,而是x+1,也就是设t=x+1,就可以把上面的抽象函数变形成这样
再经过简单的变形后,可以得到
这样,x>0的情况就可以解决了
下面是完整代码
int f(int x){
if(x==0){
return 0;
}
else if(x<0){
return f(x+1)-1;
}
else{
return f(x-1)+1;
}
}// C/C++,Java
def f(x:int)->int:
if x==0:
return 0
elif x<0:
return f(x+1)-1
else:
return f(x-1)+1
#python
记住:只要用到了递归,一定要想一想递归什么时候结束,否则做数学永远也得不出正确答案,编程则会让程序崩溃。
课后作业2:把下面的函数写成代码,并计算出f(-5)的值