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

Mojo语言递归阶乘代码报错求助:类型转换与调用歧义问题

解决Mojo递归阶乘代码的错误问题

错误原因分析

  1. 返回类型不匹配:Mojo的fn是强类型静态函数,必须显式声明返回值类型。你的代码中fn fact(n:Int)未指定返回类型,默认返回None,但实际返回了Int类型的1,导致类型转换错误。
  2. 函数调用歧义:当前环境中同时存在两个同名的fact函数——一个是你编写的fn版本,另一个是之前定义的def(Python风格动态函数)版本,编译器无法确定调用哪一个,引发歧义。

修正后的代码

fn fact(n: Int) -> Int:
    if n == 1:
        return 1
    else:
        return n * fact(n - 1)

var num = 14

if num < 0:
    print("sry")
elif num == 0:
    print("1")
else:
    print(fact(num))

关键修正点

  • 给fn fact添加返回类型声明-> Int,明确函数返回整数类型
  • 确保环境中没有重复定义同名的def fact函数,若之前有定义需删除或重命名

运行修正后的代码,输入num=14会输出正确的阶乘结果87178291200。

内容的提问来源于stack exchange,提问作者김현준

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:22:48