首页 > 编程语言 > 详细

python3 递归函数return返回None

时间:2019-10-15 01:17:59      阅读:141      评论:0      收藏:0      [点我收藏+]
今天写了一个函数,执行之后打印出来的结果是None,不明白,之后百度了一下,这里记一下过程,免得之后再踩坑
#!/usr/bin/python3
# -*- coding:utf-8 -*-


def binarysystem_to_decimalsystem():
‘‘‘实现二进制转十进制‘‘‘
binarysystem = input(‘请输入数据:‘)
decimalsystem_sum = 0
try:
binarysystem = float(binarysystem)
except ValueError:
print(‘输入错误,请重新输入‘)
binarysystem_to_decimalsystem()
else:
binarysystem = str(binarysystem)
if len(binarysystem.replace(‘1‘, ‘‘).replace(‘0‘, ‘‘).replace(‘.‘, ‘‘)) == 0:
binarysystem = binarysystem.split(‘.‘)
binarysystem_int = binarysystem[0] # 整数部分
binarysystem_int = binarysystem_int[::-1]
binarysystem_float = binarysystem[1] # 小数部分
for i, index in zip(binarysystem_int, range(0, len(binarysystem_int))):
decimalsystem_sum = int(i) * 2 ** index + decimalsystem_sum
for j, secondar in zip(binarysystem_float, range(1, len(binarysystem_float) + 1)):
decimalsystem_sum = int(j) * 2 ** (-1 * secondar) + decimalsystem_sum
return decimalsystem_sum

else:
print(‘输入错误,请重新输入‘)
binarysystem_to_decimalsystem()


if __name__ == ‘__main__‘:
print(binarysystem_to_decimalsystem())

上面是刚写完的代码,按照想法,应该会输出正确的值,结果却输出了None
按照函数的定义,在没有返回值或是return语句没有接收到返回值的时候,才会出现None
之后debug了一下,发现函数在执行之后得到了正确的结果,但是却没有直接结束,而是回到了判断分支的地方
之后在网上百度了一下,也看了一些文章,了解到这是递归函数的一个坑,当同时使用判断语句、递归函数、return语句的时候,这个坑就会出现
比如下面这个函数
def test_recursion(x):
if x > 9:
x -= 3
test_recursion(x)
else:
return x


print(test_recursion(20))

这个执行出来的结果也是None,改用print打印的写法,结果就是正确的
def test_recursion(x):
if x > 9:
x -= 3
return test_recursion(x)
else:
print(x)


test_recursion(20)

要使用递归函数,return语句的正确的写法是下面这个
def test_recursion(x):
if x > 9:
x -= 3
return test_recursion(x)
else:
return x


print(test_recursion(20))

这里面的逻辑是这样:这个函数被重复调用了4次,在最后一次调用的时候得到了正确结果,然后回到了倒数第二次调用的地方,之后倒数第三。。。。。。。
也即是说,第一种写法,因为递归的时候缺少了return语句,返回的结果是第一次被调用的结果,不是最后一次的正确结果
第二种写法,加上了return语句,返回的是最后一次的结果,逻辑是最后一次的结果用return语句给了倒数第二次调用,倒数第二又给了倒数第三。。。

python3 递归函数return返回None

原文:https://www.cnblogs.com/tianyingz/p/11675065.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!