在上一章,我们已经初步了解了关于函数的一些知识。另外提一嘴,函数有多个参数时,一般使用逗号分隔开,不管是定义函数还是调用函数。

那么,接下来,我们继续学习函数。

首先先说一点,上期的代码太乱了,本期决定减少出现的编程语言,只出现根据tiobe语言排行榜当下最流行的四门编程语言:python,C++,C,Java,其中C/C++我们会放在一起讲,作为代码片段/半成品用的语言。完整代码会出现以上所有四种编程语言。

分段函数

image

如何在编程里实现这个函数呢?

很明显,我们需要先对参数进行条件判断,在大于等于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?

抽象函数

image

怎样在编程里实现这个函数呢?

首先可以看到,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,就可以把上面的抽象函数变形成这样

image

再经过简单的变形后,可以得到

image

这样,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)的值
image

posted on 2024-08-04 10:44  eason66  阅读(6)  评论(0编辑  收藏  举报