You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 16:27:38