最近初学递归,请大神们帮我解答下2个问题
result = []
def get_digits(n):
if n > 0:
result.insert(0,n%10)
get_digits(n//10)
get_digits(658978)
print(result)
第一个问题:上段代码为什么不需要设置return返回值呢?
第二个问题:为什么没有判断n<0,也不会报错呢,像这个函数就要判断else的情况,不然会报错
>>> def fun1(n):
if n > 0:
return n + fun1(n-1)
>>> print(fun1(5))
首答:
一、这段程序里面已经对result里面的值进行了修改,而你需要的刚好是result的值,
二、if的条件为True时执行后面的语句,为False时不执行,因为你没有写else,程序认为n <= 0时不做任何动作,不报错 好了,这是我在论坛的第二次回答了$-$:
第二段程序中,由于在递归过程当中,经历几次之后,n会等于0,而你没有告诉它n<=0时做什么,这个时候返回一个None(应该是)再对None进行递归时无法进行判断,于是就错了。
应该差不多。。。吧 因为result是全局变量,这个函数是对这个全局变量做的操作,你最后打印的也是result,所以不用返回。
如果你print(get_digits())那就只能得到一个None 本帖最后由 Messj 于 2017-6-9 21:46 编辑
新水友 发表于 2017-6-8 17:03
首答:
一、这段程序里面已经对result里面的值进行了修改,而你需要的刚好是result的值,
二、if的条件为T ...
2l是第一问的正解 新水友 发表于 2017-6-8 17:14
好了,这是我在论坛的第二次回答了$-$:
第二段程序中,由于在递归过程当中,经历几次之后,n会等于0,而你 ...
这里有一处分析错了,那就是并不是在对None进行递归时无法进行判断。
当返回None时,函数就已经结束了。
那为什么会报错。
你试试用1+None看看就知道啦
之前的返回值都是整数类型,但None不是整数类型,它是None类型,自成一派。。。
整数是无法与None进行加法运算。 Messj 发表于 2017-6-9 21:45
这里有一处分析错了,那就是并不是在对None进行递归时无法进行判断。
当返回None时,函数就已经结束了。 ...
嗦嘎,我知道是None的问题,不过不知道怎么表述,所以就很外行的说对None递归了$=$ 新水友 发表于 2017-6-10 15:21
嗦嘎,我知道是None的问题,不过不知道怎么表述,所以就很外行的说对None递归了$=$
嗯嗯,其实很多错误idle都会告诉的……但是很多人看到红字就不想看了 哈哈,刚学到异常这一章 新水友 发表于 2017-6-8 17:14
好了,这是我在论坛的第二次回答了$-$:
第二段程序中,由于在递归过程当中,经历几次之后,n会等于0,而你 ...
谢谢吧主的回答~
对于第二个问题还是有些不明白{:5_92:},上述两段代码程序执行几次后都会有n=0的情况,但是此时函数里都没有判断<=0应该做什么,为啥第一段不设置else不报错呢
页:
[1]