一 递归算法简介
学习Python、C++等各类编程,算法都是非常重要的,递归算法更是应用广泛,不仅可独立使用,也常用于其他算法的过程。
本文用10个最经典递归实例让你秒懂递归算法
但一定得自己实践练习,不然眼睛是全看明白了,手还懵圈呢,下次再用递归算法,还是觉得又绕又难! (以下讲解递归算法时,用词会尽可能简单明了,不写那么多专业术语,只为初学者能更快的理解和掌握)
二 递归算法原理(重点)
这部分很重要,初次读这里简单看看即可,结合递归实例时认真理解。
1.递归算法定义
简单的讲,就是在函数中再次调用自己(当前函数)
def he(n):
if n==1:
return 1
return he(n-1)+n
2.递归算法原理
递归算法之所以称之为递归,是因为运行时需要两个过程:
一是递:
可以理解为把公式传递出去,因为只有公式,没有值,计算不了。
另一个是归:
可以理解为把实际数据的值送回来,用于计算公式
3.递归算法必备条件
递归算法需要两个条件:
一、逻辑公式
二、终止条件
递归算法是一个循环,但不能无限循环,所以需要一个终止条件,满足条件就向回走。
三 递归算法经典实例
递归经典实例1. 求1到任意数字的总和
如:输入5, 求1+2+3+4+5。
def he(n):
if n==1:
return 1
return he(n-1)+n
#输入数字
a = int(input("输入数字:"))
#调用函数he,并将a的值,赋值给函数中的变量n,
#计算的结果返回给h
h = he(a)
#输出结果
print("1累加到%d的和为%d"%(a,h))
这是个经典递归实例,简单易学,我会结合第二部分递归算法原理按步骤详细讲解,相信你可以轻松理解
步骤1,递归的递:
将数字5传递给函数,要求函数计算1到5的累加值。
函数(5)表示:请将1+4的累加值告诉我,再加上我本身这个5就可以了。得到逻辑公式:he(4)+5
把公式需求传递给函数(4),
函数(4)表示:请将1+3的累加值告诉我,再加上我本身这个4就可以了。得到逻辑公式:he(3)+4
…… …… ……
递的过程:
he(5)>>he(4)+5
he(4)>>he(3)+4
he(3)>>he(2)+3
he(2)>>he(1)+2
he(1)>>he(0)+1
…… ……
得到代码:
def he(n):
return he(n-1)+n
步骤2,递归的归:
程序不能无休止的循环,所以我们需要告诉计算机何时停止。
我们不用计算就可知道,当运行到 he(1) 时,结果就是1。 得到代码:
def he(n):
if n==1:
return 1
return he(n-1)+n
当然,上面写成 if n==0: return 0
也可以运行。
归的过程:
he(5)>>he(4)+5 >>10+5 >>15
he(4)>>he(3)+4 >>6+4 >>10
he(3)>>he(2)+3 >>3+3 >>6
he(2)>>he(1)+2 >>1+2 >>3
he(1)>>he(0)+1 >>1
递归经典实例2. 求1到任意数的阶乘
输入:5
表示计算 12345
输出:120
def fac(n):
if n==1:
return 1
return fac(n-1)*n
a = int(input("输入数字:"))
h = fac(a)
print("%d的阶乘为%d"%(a,h))
递归经典实例3. 求任意两个数字间所有数字的总和
输入:
2
5
表示计算从2到5的和
输出:
14
def he(m,n):
if n==m:
return m
return he(m,n-1)+n
a = int(input("输入开始数字:"))
b = int(input("输入结束数字:"))
h = he(a,b)
print("%d累加到%d的和为%d"%(a,b,h))
递归经典实例4. 求1到任意数的阶乘和
输入:
5
表示计算:1!+2!+3!+4!+5!
输出:
153
def fac(n):
if n==1:
return 1
return fac(n-1)*n
a = int(input("输入数字:"))
h = 0
for i in range(1,a+1):
h += fac(i)
print("%d的阶乘和为%d"%(a,h))
递归经典实例5. 求斐波那契数列第n位的值
斐波那契数列为这样一组数:
1、1、2、3、5、8、13、21、34……
从第3项开始,每一项为前两项的和。
输入: 6
输出: 8
def fib(n):
if n==1 or n==2:
return 1
else:
return fib(n-1)+fib(n-2)
a = int(input("输入数字:"))
h = fib(a)
print("斐波那契数列第%d位为%d"%(a,h))
一定把上面5个程序自己做,不要看答案
下一篇我们继续10个最经典递归实例让你秒懂递归算法 的另外5篇。
加油!
关注“Python入门速学”,快速掌握Python
原文始发于微信公众号(Python入门速学):10个最经典递归实例让你秒懂递归算法
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/236469.html