10个最经典递归实例让你秒懂递归算法

一 递归算法简介

学习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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!