Rust Recursive Linked List to Assembly Code

pub fn factorial(n: u64) -> u64 {
    if n == 0 {
        1
    } else {
        n * factorial(n - 1)
    }
}
fn fibonacci(n: u32) -> u32 {
    if n == 0 {
        return 0;
    } else if n == 1 {
        return 1;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}
// Singly linked list
pub struct NonEmpty<T> {
    item: T,
    next: Option<Box<NonEmpty<T>>>,
}

type List<T> = Option<Box<NonEmpty<T>>>;

// Sum a list
pub fn sum_list(list: &List<u64>) -> u64 {
    if let Some(item) = list {
        item.item + sum_list(&item.next)
    } else {
        0u64
    }
}