Python的函数和递归

目录

一、Python函数

二、函数的定义

三、函数调用和return语句

四、函数中的变量

1、在函数外(全局的x):

2、在函数内部(局部的x):

3、在函数中声明为全局变量的:

4、错误写法:

五、递归


一、Python函数

在之前的学习中,我们见过了“len()”,“max()”,等,这些都是Python自带的基本函数,方便了我们代码的编写。

那为什么我们需要函数呢?

在写代码时,如果在代码中多次需要某功能,比如求某几个数中的平均数,我们如果在每个地方都写一遍求平均值的代码未免过于麻烦了,我们可以在程序的某一个地方写上一个函数,然后等需要它的时候用实参(后面会说)进行调用就可以了

当然,我们不仅可以使用自带的函数,我们也可以自己创造一个函数,只要把其中的功能包起来就行

二、函数的定义

在Python中,我们会用def关键字来定义一个函数,具体格式如下:

def 函数名 (参数1, 参数2 ......)

        语句组(也就是函数体)

(当然也可以没有参数):

def 函数名 ()

        语句组(也就是函数体)

三、函数调用和return语句

当我们写完了函数时,我们只需要一句话就可以实现函数的调用,即:

函数名 (参数1, 参数2,......)

对于函数的调用,也是一个表达式,函数则会调用表达式的数值,然后由函数内部的return语句决定,return语句格式如下:

return 返回值

return语句的功能就是结束函数的执行,并将返回值作为结果返回,这里的“返回值”可以是一个常量、变量、或是复杂的表达式均可。

如果函数不需要返回值,直接写return即可。

return作为函数的出口,可以在函数中多次出现,且多个return语句的“返回值”可以不同。

现在我们已经了解了函数的一些基本知识,现在让我们自己来手搓一个Max函数!(虽说Python自带,但是肯定没有自己手搓的香~~)

代码:

def Max (x,y):
    if x > y :
        return x
    else :
        return y

#以上内容为函数

n = Max (6,8)
print(n)
print(Max(9,n))

输出:

在上面的代码中,“Max (x,y)”中的x和y就是形参,而“n = Max (6,8)”和“print(Max(9,n))”中的6、8、9,n就是实参,程序会把我们输入的实参调入到函数的形参中,然后在内部的函数体进行运算,最后通过return语句输出

上面我们提到,函数可以返回多个数值,比如我们让用户给定两个数字,然后返回对应的加减乘除运算:

a = int (input("请输入第一个数字:"))
b = int (input("请输入第二个数字:"))

def Jjcc (x,y) :
    if y == 0 :
        print("输入错误!!!!")
    else :
        return x+y , x-y , x*y , x/y

jieguo = Jjcc (a,b)
print(jieguo)

我们来看看对应的两种结果:

四、函数中的变量

在函数中,我们可以取相同的变量名,但是当变量在不同位置时,也会对变量最终的数值造成影响,我们下面来看一下具体的例子:

1、在函数外(全局的x):

x = 6
def scy () :
    print("x的值是:",x)

scy ()

这个x是全局的x,所以结果就是6

2、在函数内部(局部的x):

def scy () :
    x = 6
    print("x的值是:",x)

scy ()

这个是局部的x,只会作用在函数内部,结果是6

3、在函数中声明为全局变量的:

x = 10
def scy () :
    global x
    print("x的值是:",x)
    x = 8
    print("x的值是:",x)
scy ()

我们可以在函数中用global关键字对变量进行声明,这样x的值就是全局变量x的值了,而当我们在内部函数中进行更改时,x的数值也会跟着变化:

所以输出是:

4、错误写法:

x = 10
def scy () :
    print("x的值是:",x)
    x = 8
scy ()

在上面的这个例子中是错误的,我们在函数中一开始是默认x的值是全局变量的值,但是后面又对其进行更改,会让程序发生报错!!!!!!

五、递归

在一个概念中用到了这个概念本身,就叫递归

在Python中通俗的说就是:一个函数,自己调用了自己,就是递归

当然我们也可以看作是调用了一个和自己同名同功能的函数(名字其实也可以不同~~~)

我们下面用“阶乘”的概念来解释以下递归:

假如现在我们要写“5”的阶乘,那我们就可以看作是求“5”乘“4”的阶乘,那么“4”的阶乘我们可以看作“4”称“3”的阶乘......以此类推,直到数字“1”,那么众所周知,1的阶乘就是1(这个条件很重要),那么我们就可以根据就这个思想来求解n的阶乘了:

n = int(input("请输入数字:"))
def JieCheng (n) :
    if n == 1 :
        return 1   #终止条件
    else :
        return n * JieCheng (n-1)

a = JieCheng (n)
print(a)

注意!!!:递归函数需要一个终止条件!(上面的例子终止条件就是一的阶乘就是一),否则程序就会进入无穷递归甚至导致崩溃!!!

我们在编写递归函数时,需要有一个基本思想:即先做一步,做完后让剩下的步骤中有能包含第一步的相似之处的步骤,才能实现递归

下面让我们来用递归函数来解决一个经典小问题:

如果有一个n阶的台阶,每次只能走一or两阶,那么一共有几种走法:

n = int(input("请输入台阶的阶数:"))
def Ways (n) :
    if n == 1 :
        return 1
    elif n== 2 :
        return 2
    else :
        return Ways(n-1) + Ways(n-2)

a = Ways(n)
print(a)

解释:

我们先来想终止条件,当阶数只有1的时候,我们只有一种方法,当阶数为2的时候,我们有两种方法,而当我们走了第一步后可能有n-1个台阶或者n-2个台阶,这时就可以继续效仿第一步了。

以上就是Python函数和递归的基本内容:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值