算法第四版

基础编程模型

编写一个静态方法lg() 接收一个整型参数N 返回不大于 \(log_2{N}\) 的最大整数

fn lg(num: i32) -> i32 {
    if num <= 1 {return 0};
    let mut n: i32 = 0;
    while pow(2,n) <= num {
	println!("n: {}, 2^n:{}, num: {}",n,2^n,num);
	n += 1;
    }
    return n - 1;
}

fn pow(num: i32, n: i32) -> i32{
    println!("n: {}",n);
    if n == 0 {
	return 1;
    }
    return num * pow(num,n-1);
}

编写一个静态的递归方法计算 \(ln{N!}\)

fn ln(num: f32) -> Result<f32, ()> {
    if num < 0.0 {
        return Err(());
    }
    if num == 1.0 {
        return Ok(0.0);
    }
    return Ok(num.ln() + ln(num - 1.0).unwrap());
}