学习笔记-小甲鱼Python3学习第二十二讲:函数:递归是神马

如果一个函数在内部调用自身本身,这个函数就是递归函数。

递归函数特性:

1.必须有一个明确的结束条件

2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3.相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)

4.递归算法很简洁,递归效率不高,递归层次过多会导致栈溢出


递归无限循环:

def recursion():

    return recursion()


求阶乘:

方法一、for循环:   

def factorial(x):

    re = x

    for i in range(1,x):

        re *= i

    return re


num = int(input('请输入一个正整数:'))

result = factorial(num)

print('%d的阶乘是%d'%(num,result))


方法二、递归

def factorial(x):

    if x == 1:

        return 1

    else:

        return x * factorial(x-1)


num = int(input('请输入一个正整数:'))

result = factorial(num)

print('%d的阶乘是%d'%(num,result))


------------------------分割线,哈哈哈---------------------------

课后作业:


0.递归在编程上的形式是如何表现的?

编程上表现为函数调用自身


1.递归必须满足哪两个基本条件?

a、函数调用自身;

b、设置了明确的结束条件


2.思考一下,按照递归的特性,在编程中有没有不得不使用递归的情况?


3.用递归去计算阶乘问题和斐波那契数列是很糟糕的算法,你知道为什么吗?


4.请聊一聊递归的优缺点:


5.拿手机拍一张“递归自拍照片”


----------------------分割线,哈哈哈--------------------

动动手


0.使用递归编写一个power()函数模拟内建函数pow(),即power(x,y)为计算并返回x的y次幂的值。

def power(x,y):

    if y == 1:

        return x

    else:

        return x * power(x,y-1)


print('------------------幂运算-----------------------')

Bnum = int(input('请输入一个底数:'))

Enum = int(input('请输入指数:'))

result = power(Bnum,Enum)

print('%d的%d次方等于%d.'%(Bnum,Enum,result))


1.使用递归编写一个函数,利用欧几里得算法求最大公约数,例如gcd(x,y)返回值为参数x和参数y的最大公约数。

def gcd(m,n):

    if n == 0:

        return m

    else:

        return gcd(n,m%n)


a = int(input('请输入第一个正整数:'))

b = int(input('请输入第二个正整数:'))

result = gcd(a,b)

print('%d与%d的最大公约数是:%d'%(a,b,result))

猜你喜欢

转载自blog.51cto.com/wszzdanm/2165658
今日推荐