首页 > 其他分享 >函数(下):数学信息学不分家

函数(下):数学信息学不分家

时间:2024-08-04 10:50:20浏览次数:12  
标签:信息学 return 函数 分家 int C++ else 编程语言

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

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

首先先说一点,上期的代码太乱了,本期决定减少出现的编程语言,只出现根据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

标签:信息学,return,函数,分家,int,C++,else,编程语言
From: https://www.cnblogs.com/eason66-blog/p/18331466/function2_ty

相关文章

  • 全面弄懂少儿编程与信息学奥赛-V1.0版
    全面弄懂少儿编程与信息学奥赛-V1.0版本次讲述话题都为作者自己学编程以及所在专业,行业,以及教学经验和实践来原创撰写,不保证100%正确,但是保证99%的相对正确,同样,我希望任何人去看待任何问题都理性思考,独立思考,自己去评判别人说的是否有道理,这个世界上任何事都没有绝对的对与错,但......
  • c动态加载c/c++ so并调用其中的函数或者子类实现
    在不少服务器应用中,会采用插件化或者模块化的体系实现具体的业务功能,比如mysql支持插件化体系,nginx采用模块化体系。总得来说,很多时候,因为扩展性,系统会采用动态加载so的方式扩展业务功能,而主框架不需要每次新增功能就不得不重新编译,很多时候,对于二进制发行的应用来说,不可能这......
  • C语言关于函数的基本介绍
    目录一、前言二、为什么需要函数?三、什么是函数?四、函数的作用及分类。五、函数的基本用法。六、主函数的简单介绍。七、函数原型以及一些常用的系统函数的介绍。一、前言    这些都是作者学习C语言过程中了解到的只是,有的地方可能不是写的特别清楚,同时这也是......
  • 【C语言】C语言期末突击/考研--函数
    目录一、函数的声明与定义-嵌套调用1.1.函数的声明与定义1.2.函数的分类与调用二、函数的递归调用三、局部变量与全局变量3.1.全局变量解析形参实参解析3.2.局部变量与全局变量四、练习题及解析一、函数的声明与定义-嵌套调用1.1.函数的声明与定义    函数间......
  • Python函数的异常
    #异常:是一个事件,这个时间在程序执行过程中发生,影响了程序的正常执行#异常处理最终目的:让程序在有异常时,仍能够正常运行#语法格式一:try:  print(a)  #可能够引发异常的现象的代码except:  #基类异常  print('出现错误')b=10print(b)#法二try: ......
  • 匿名函数lambda
    #匿名函数对简单函数的定义#语法:函数名=lambda形参:返回值#lambda是定义匿名函数的关键字,相当于函数的def#形参的数量按需加,加多少都可以,只要用逗号隔开就可以#deffunc(a,b):#  returna+b#print(func(1,2))#匿名函数#func=lambdaa,b:a+b#print(func......
  • CTFSHOW 萌新 web9 解题思路和方法(利用system函数执行系统命令)
    点击题目链接,从题目页面显示的代码中可以看到我们可以使用命令执行漏洞查看网站的文件:我们首先使用system函数并使用ls命令查看当前目录下的所有文件:因为题目中提示flag在config.php文件中,所有可以直接读取该文件当然,如果题目中没有说明falg在那个文件中,我们可以使用......
  • 【C语言】字符函数和字符串函数详解
    ......
  • PHP中preg_replace函数解析
    preg_replace—执行一个正则表达式的搜索和替换mixedpreg_replace(mixed$pattern,mixed$replacement,mixed$subject)搜索subject中匹配pattern的部分,以replacement进行替换。常见于CTF竞赛中web题目中1、/g表示该表达式将用来在输入字符串中查找所有可能的匹配,返......
  • 嵌入式学习day9(string函数族)
    一丶strcpy和strncpy1.strcpy    #include<string.h>    char*strcpy(char*dest,constchar*src);    功能:实现字符串复制    参数:char*dest:目标字符串首地址    constchar*src:原字符串首地址    返回值:目标字符串首地......