鱼C论坛

 找回密码
 立即注册
查看: 1776|回复: 6

递归的懵逼小白跪求帮助

[复制链接]
发表于 2018-12-22 20:42:37 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 猫不理 于 2018-12-22 21:45 编辑

通过数小时的学习,我对递归的概念可以说是有一点的了解了
1,必须调用自身函数
2,必须设置一个正确的返回值

在我认为递归的逻辑必须要可以拆分出更细小的部分,然后到达终点再递归回去,所以这一题
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
应该是可以拆分成以下这样,那么逻辑就明白了 微信图片_20181222203611.jpg

菲薄拉起数列: 微信图片_20181222203834-副本.jpg

但是这两题,我怎么都写不出到底是怎样的递归逻辑,求解

0. 使用递归编写一个十进制转换为二进制的函数(要求采用“取2取余”的方式,结果与调用bin()一样返回字符串形式)。


1. 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==> [1, 2, 3, 4, 5]

请各位不要再给代码我看了,我就想知道她的递归逻辑是怎么样的,只有图才能明白吧 ,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-22 21:40:07 | 显示全部楼层
随手写的,理解思路就好,不要在意细节
  1. list1 = []
  2. def binary(n):
  3.     if n:
  4.         binary(n//2)
  5.         list1.append(str(n%2))
  6. n = int(input('输入n的值:'))
  7. binary(n)
  8. result = ''
  9. for each in list1:
  10.     result += each
  11. print(result)


  12. result = []
  13. def get(n):
  14.     if n % 10:
  15.         result.append(n%10)
  16.         get(n//10)
  17. n = int(input('输入n的值:'))
  18. get(n)
  19. print(result)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-22 21:44:50 | 显示全部楼层
幻千城12 发表于 2018-12-22 21:40
随手写的,理解思路就好,不要在意细节

哥,就是代码看得不太懂,能不能画个图给我啊,我想知道她的递归逻辑是个怎么样子
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-22 21:49:26 | 显示全部楼层
猫不理 发表于 2018-12-22 21:44
哥,就是代码看得不太懂,能不能画个图给我啊,我想知道她的递归逻辑是个怎么样子

代入一个数去试一下,第二个留了个坑,想下看为什么会这样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 01:18:49 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 10:05:00 | 显示全部楼层
本帖最后由 heidern0612 于 2018-12-23 10:07 编辑

递归你要能理解什么时候必须用递归,

你总结的两个条件确实是必须的,但是还有最重要的一点你没写上,就是递归的步骤必须是重复的

所以,递归最重要的就是,你要把重复的步骤能写明白,设置好结束条件,递归自己就完成了。


就像你第0个,什么时候是重复的操作?就是数字整除2之后加上字符串化的数字求2余返回的result值。

一直重复上述步骤直到数字为0(归)..


抱歉我不会画图,我递归自己也学的不太好。

但是递归我一般能把重复的步骤弄明白了,想好结束的条件(归),递归就写出来了。

我考虑递归的时候,就是先考虑这件事或者这个函数有没有重复的步骤,有的时候再考虑递归,没有就不考虑。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-12-23 10:12:24 | 显示全部楼层
本帖最后由 倚楼听雨落 于 2018-12-23 10:41 编辑

你说的是这样的图片吗?



至于第二个你可以设置一个循环体:
while  这个数
这个数%10   //每次拆出最后一位
这个数//=10  //每次把最后一位数去掉

然后把每个数都放进列表里面,最后排序就好了。

2进制

2进制
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-12 14:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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