mojolang

Mojo-lang error about fn, recursion factorial code


I'm a student. I am currently doing research about how fast Mojo Lang is. I want to run the recursion code, and compare it to python. I decided to write a simple recursion code, and an error occurred. Please help me.

I tried to make a factorial code. If i run the code, it prints me a factorial of num variable.

here is my code

fn fact(n: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))

and this is the error

error: Expression [19]:7:16: cannot implicitly convert 'Int' value to 'None' in return value
        return 1
               ^

error: Expression [19]:9:22: ambiguous call to 'fact', each candidate requires 0 implicit conversions, disambiguate with an explicit cast
        return n*fact(n-1)
                 ~~~~^~~~~

Expression [19]:5:1: candidate declared here
fn fact(n:Int):
^

Expression [14]:5:1: candidate declared here
def fact(n:Int):
^

error: Expression [19]:29:19: ambiguous call to 'fact', each candidate requires 0 implicit conversions, disambiguate with an explicit cast
        print(fact(num))
              ~~~~^~~~~

Expression [19]:5:1: candidate declared here
fn fact(n:Int):
^

Expression [14]:5:1: candidate declared here
def fact(n:Int):
^

Solution

  • The first error message tells you the problem: the function is meant to return None and you try to return an Int. This should hint you how to fix.