鱼C论坛

 找回密码
 立即注册
查看: 964|回复: 2

递归问题

[复制链接]
发表于 2019-6-3 00:50:03 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如何用把迭代转化成递归,一个问题我可以用迭代来实现,但是我却无法用递归来实现,在这里我讨论不是哪个具体的问题,而是如何把用迭代能实现的代码在将它转化成递归的方法,求思路
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-6-3 09:09:47 | 显示全部楼层
当函数第一次执行操作完成后,下一次的操作还是与这个函数的功能一样的时候,这种情况下就可以用到递归。但是要写好退出递归的条件,否则会抛出最高深度的异常。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-3 19:12:57 | 显示全部楼层
一个迭代的操作,如果要转换成递归,那就要明确执行相同操作的部分,提取递归的部分以及结束递归的条件、举个例子
用while做辗转相除法:
  1. a=64
  2. b=16
  3. while True:
  4.     if b==0:
  5.         break
  6.     else:
  7.        b,a=a%b,b
复制代码


我们找到递归操作的部分,
  1. if b==0#判断,每次递归都会执行是终止递归的条件
  2. b,a=a%b,b
复制代码

只要不终止循环,这一部分就一定执行,而结束循环的条件就是b==0的时候
那我们转换成递归
  1. def gcd(a, b):
  2.     if b==0:
  3.         return a
  4.     else:
  5.         return gcd(b, a%b)
  6. print(gcd(64,16))
复制代码

这里说明一下,else部分,
其实做的操作就相当于 b,a=a%b,b
然后执行一次gcd(b,a),然后重复。

我语言组织不是很好,希望你能看懂。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-16 04:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表