// run-pass

fn f(x: isize) -> isize {
    // println!("in f:");

    println!("{}", x);
    if x == 1 {
        // println!("bottoming out");

        return 1;
    } else {
        // println!("recurring");

        let y: isize = x * f(x - 1);
        // println!("returned");

        println!("{}", y);
        return y;
    }
}

pub fn main() {
    assert_eq!(f(5), 120);
    // println!("all done");

}