鱼C论坛

 找回密码
 立即注册
查看: 3377|回复: 9

[已解决]最近初学递归,请大神们帮我解答下2个问题

[复制链接]
发表于 2017-6-8 14:49:33 | 显示全部楼层 |阅读模式

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

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

x

  1. result = []
  2. def get_digits(n):
  3.     if n > 0:
  4.         result.insert(0,n%10)
  5.         get_digits(n//10)
  6.    
  7. get_digits(658978)
  8. print(result)
复制代码



第一个问题:上段代码为什么不需要设置return返回值呢?
第二个问题:为什么没有判断n<0,也不会报错呢,像这个函数就要判断else的情况,不然会报错
  1. >>> def fun1(n):
  2.         if n > 0:
  3.                 return n + fun1(n-1)

  4.        
  5. >>> print(fun1(5))
复制代码



最佳答案
2017-6-9 21:41:29
本帖最后由 Messj 于 2017-6-9 21:46 编辑
新水友 发表于 2017-6-8 17:03
首答:
一、这段程序里面已经对result里面的值进行了修改,而你需要的刚好是result的值,
二、if的条件为T ...


2l是第一问的正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-8 17:03:52 | 显示全部楼层
首答:
一、这段程序里面已经对result里面的值进行了修改,而你需要的刚好是result的值,
二、if的条件为True时执行后面的语句,为False时不执行,因为你没有写else,程序认为n <= 0时不做任何动作,不报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-6-8 17:14:53 | 显示全部楼层
好了,这是我在论坛的第二次回答了$-$:
第二段程序中,由于在递归过程当中,经历几次之后,n会等于0,而你没有告诉它n<=0时做什么,这个时候返回一个None(应该是)再对None进行递归时无法进行判断,于是就错了。


应该差不多。。。吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-9 17:21:38 | 显示全部楼层
因为result是全局变量,这个函数是对这个全局变量做的操作,你最后打印的也是result,所以不用返回。
如果你print(get_digits())那就只能得到一个None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-9 21:41:29 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Messj 于 2017-6-9 21:46 编辑
新水友 发表于 2017-6-8 17:03
首答:
一、这段程序里面已经对result里面的值进行了修改,而你需要的刚好是result的值,
二、if的条件为T ...


2l是第一问的正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-9 21:45:35 | 显示全部楼层
新水友 发表于 2017-6-8 17:14
好了,这是我在论坛的第二次回答了$-$:
第二段程序中,由于在递归过程当中,经历几次之后,n会等于0,而你 ...

这里有一处分析错了,那就是并不是在对None进行递归时无法进行判断。
当返回None时,函数就已经结束了。
那为什么会报错。
你试试用1+None看看就知道啦
之前的返回值都是整数类型,但None不是整数类型,它是None类型,自成一派。。。
整数是无法与None进行加法运算。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-10 15:21:41 From FishC Mobile | 显示全部楼层
Messj 发表于 2017-6-9 21:45
这里有一处分析错了,那就是并不是在对None进行递归时无法进行判断。
当返回None时,函数就已经结束了。 ...

嗦嘎,我知道是None的问题,不过不知道怎么表述,所以就很外行的说对None递归了$=$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-10 15:51:13 From FishC Mobile | 显示全部楼层
新水友 发表于 2017-6-10 15:21
嗦嘎,我知道是None的问题,不过不知道怎么表述,所以就很外行的说对None递归了$=$

嗯嗯,其实很多错误idle都会告诉的……但是很多人看到红字就不想看了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-12 07:54:32 From FishC Mobile | 显示全部楼层
哈哈,刚学到异常这一章
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-16 11:43:34 | 显示全部楼层
新水友 发表于 2017-6-8 17:14
好了,这是我在论坛的第二次回答了$-$:
第二段程序中,由于在递归过程当中,经历几次之后,n会等于0,而你 ...

谢谢吧主的回答~
对于第二个问题还是有些不明白,上述两段代码程序执行几次后都会有n=0的情况,但是此时函数里都没有判断<=0应该做什么,为啥第一段不设置else不报错呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 03:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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