Python递归函数无法返回小数部分,结果始终为None求助
问题根源:递归调用缺少return语句
先看你写的代码:
time = epoch_years # 该值为50.13452189..... def timex(t): # 分离并返回t的小数部分 print("t;",t) if t < 1: return t else: timex(t-1) # 这里就是问题所在! result = timex(time)
为什么返回None?
当你调用timex(50.134...)时,函数会进入else分支,调用timex(49.134...),但这个递归调用的结果没有被返回。也就是说,每一层t>=1的函数执行完timex(t-1)后,就直接结束了,没有把下层递归的结果传递回来——Python中函数如果没有显式return语句,默认返回None。
直到递归到timex(0.134...)时,满足t<1,它返回了正确的小数部分0.134...,但这个值没有被上层的timex(1.134...)返回,更别说传到最上层了。所以最终你拿到的result就是最上层函数默认返回的None。
修正后的代码
只需要在else分支里加上return,把递归调用的结果传递回来就行:
time = epoch_years # 该值为50.13452189..... def timex(t): print("t;",t) if t < 1: return t else: return timex(t-1) # 加上return,传递递归结果 result = timex(time)
这样每一层递归都会把下层的返回值传递上来,最终result就能拿到正确的小数部分了。
更简单的实现方式
其实不需要递归也能轻松分离小数部分,比如:
- 直接计算:
result = time - int(time) - 用math模块:
import math fractional_part, integer_part = math.modf(time) result = fractional_part
内容的提问来源于stack exchange,提问作者denver-coder
相关产品推荐
相关产品推荐

