Mojo语言递归阶乘代码报错求助:类型转换与调用歧义问题
解决Mojo递归阶乘代码的错误问题
错误原因分析
- 返回类型不匹配:Mojo的
fn是强类型静态函数,必须显式声明返回值类型。你的代码中fn fact(n:Int)未指定返回类型,默认返回None,但实际返回了Int类型的1,导致类型转换错误。 - 函数调用歧义:当前环境中同时存在两个同名的
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,提问作者김현준
相关产品推荐
相关产品推荐

