小甲鱼Python3学习笔记之第二十二讲(仅记录学习)

第二十二讲:递归是神马

一、知识点:

1、递归:调用函数本身,并有正确的返回条件。

2、递归求阶乘:

非递归方法:

def jiec(i):
    result = i
    for each in range(1,i):
        result *= each
    return result

num = int(input('请输入一个整数:'))
result = jiec(num)
print('%d的阶乘是%d'%(num,result))

递归方法:

def jiec(i):
    if i == 1:
        return 1
    else:
        return i*jiec(i-1)

num = int(input('请输入一个整数:'))
result = jiec(num)
print('%d的阶乘是%d'%(num,result))
----------------------------------------------------我是一条分割线------------------------------------------------------

二、课后作业:

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

在编程上,递归表现为函数调用本身这样一个行为。

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

1)函数调用本身;

2)设置了正确的返回条件。

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

例如:汉诺塔,目录索引,快速排序,树结构的定义。

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

递归的优点在于易于理解,迭代的优点在于效率。在可理解性相差不大的情况下,优先选择迭代。

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

优点:1、递归的基本思想是把规模大的问题转变成规模小的问题组合,从而简化问题的解决难度;2、有些问题使用递归使得代码简介易懂。

缺点:1、由于递归的原理是调用函数本身,占用大量的内存和时间;2、初学者容易错误的设置返回条件,导致递归代码无休止调用,最终栈溢出,程序崩溃。

----------------------------------------------------我是一条分割线------------------------------------------------------

三、动动手

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

>>> def power(x,y):
	if y == 0:
		return 1
	else:
		return x*power(x,y-1)

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

>>> def gcd(x,y):
	if y == 0:
		return x
	else:
		return gcd(y,x%y)
----------------------------------------------------我是一条分割线------------------------------------------------------

猜你喜欢

转载自blog.csdn.net/huashu2017/article/details/80966822
今日推荐