python函数(3)—— 递归

前面我们将了函数调用,那是一个函数调用另外一个函数,那我们能不能让函数调用它们自己呢?

函数作为一种代码封装,可以被其他程序调用,当然,也可以被函数内部代码调用。这种函数定义中调用函数自身的方式称为递归。

目录

一、定义:

二、递归思想

三、例题实操应用

1、求和(0~n)

2、求积(1~n)

3、实现斐波那契数列        这个数列从第3项开始,每一项都等于前两项之和

4、跳楼梯问题        一次走一阶或两阶楼梯 问走法几种:

5、不死兔子问题

6、汉诺塔问题:

三、总结:


一、定义:

        是指在函数的定义中使用函数自身的方法

        它至少有一个明确的递归结束的条件(否则就是一个死循环),能给出递归终止的处理方法,每次进入更深一层递归时,问题规模(计算量)相比上次递归都应有所减少。

二、递归思想

        1、找到递归关系(数列相邻几项直接的关系),将一个复杂问题转换为与之形式相似,但规模较小的问题

        2、找到递归出口,即问题转换时,当规模足够小,可直接求解

三、例题实操应用

1、求和(0~n)

def sum_num(n: int):# 递归一定要有终止条件,否则就是一个死循环if n == 0:return 0return n + sum_num(n - 1)count = sum_num(100)
print(count)

2、求积(1~n)

def product_num(n: int):if n == 1:return 1else :return n * product_num(n - 1)n = int(input("输入一个正整数"))
product = product_num(n)
print(f"1~{n}的积为{product}")

3、实现斐波那契数列        这个数列从第3项开始,每一项都等于前两项之和

def fibo(n: int) -> int: #返回值为int类型if n <= 2:return 1if n > 2 :return fibo(n-1) + fibo(n-2)n = int(input("输入一个正整数"))
fibo_num = fibo(n)
print(f"斐波那契数列第{n}项的值为{fibo_num}")

4、跳楼梯问题        一次走一阶或两阶楼梯 问走法几种:

def jump_stair(n: int):if n == 1 or n == 2:return nelse:return jump_stair(n-1)+jump_stair(n-2)print(jump_stair(3))
print(jump_stair(10))

5、不死兔子问题

def rabbit(n):'''求不死神兔的数量,一对兔子四个月成熟期后生小兔子,之后每个月都会生一对小兔子,每一对小兔子过成熟期四个月之后还会再生小兔子,问 n 个月后兔子的对数的多少?'''if n <= 4:return 1else:return rabbit(n-1) +rabbit(n-4)
print(rabbit(14))

6、汉诺塔问题:

def tower(n):'''汉诺塔问题,(三根柱子,所有的块都在一根柱子上,其他两根柱子上没有块,且小块只能放在大块上),问将一根柱子上的所有块全部移动到另一根柱子上的步数是多少?'''if n == 1:return 1else:return 2 * tower(n - 1) +1n = int(input("请输入一个整数"))
move_count = tower(n)
print(f"要将{n}块移动到另外一根柱子上需要{move_count}步")

三、总结:

通过以上六个例题,我们能发现运用递归思路能很容易解决比较难处理的问题。

毕竟人无完人,递归也是有确定的,它不可能一直递归下去,并且当输入的值太大,递归次数太多时,python 都会报错。

为了避免“无限”调用导致堆栈溢出,python解释器会限制递归次数,默认可递归次数为1000(超过1000次就会报错,实际一般在996到998这个范围附近的次数就会报错)。

本文参考:【Python函数的递归】_python递归函数_W_chuanqi的博客-CSDN博客


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部