Rust : 递归、效率与替代、溢出
来源:互联网 发布:手机模拟笛子软件 编辑:程序博客网 时间:2024/06/08 05:12
还是codewars:
给定: u(0) = 1, u(1) = 2 ,有关系:6u(n)*u(n+1)-5u(n)*u(n+2)+u(n+1)*u(n+2) = 0 计算任何满足条件的n >= 0.#Examplesfct(n) returns un: fct(17) -> 131072, fct(21) -> 2097152
很显然 ,上递归
一、递归
fn fcn(n: i32) -> i64 { // your code match n { 0 => return 1i64, 1 => return 2i64, _ => { return 6i64 * fcn(n - 1) * fcn(n - 2) / (5i64 * fcn(n - 2) - fcn(n - 1)); } }}
经测试,通过测试。但是,提交时,运行超时,无法通过。只能作罢,换算法。
二、新算法
fn fcn(n: i32) -> i64 { // your code let mut hp: HashMap<i32, i64> = HashMap::new(); hp.insert(0i32, 1i64); hp.insert(1i32, 2i64); hp.insert(2i32, 4i64); for i in 3..(n + 1) { let i_1 = hp.get(&(i - 1)).unwrap().clone(); let i_2 = hp.get(&(i - 2)).unwrap().clone(); let temp = 5i64 * i_2 - i_1; //println!("i_1:{}, i_2:{} temp:{}", i_1, i_2, temp); let val = 6i64 * i_2 * i_1 / temp; hp.insert(i, val); } *(hp.get(&n).unwrap())}
但是新问题来了,当n很大时,你看一下:
let val = 6i64 * i_2 * i_1 / temp;
会导致i64溢出.这个如何处理?
三、数学归纳法
实际上,你如果试算一下,你会发现这些数有规律:
fn fcn(n: i32) -> i64 { 2i64.pow(n as u32)}
阅读全文
0 0
- Rust : 递归、效率与替代、溢出
- Julia & Rust : 看递归上的运行效率PK
- 递归效率与非递归效率
- scanf的溢出控制与替代使用
- Rust : 宏、重复、及向量与递归实例
- 递归与效率(兔子繁殖
- 递归与非递归的算法效率
- 递归与循环的效率问题
- Rust 变量与函数
- Rust: String 与 &str
- Rust: join,与concat
- 递归的效率问题及递归与循环比较
- 递归算法与非递归算法效率的一般计算方法
- 递归调用效率问题,递归与循环比较
- java代码--Fibonacci数列(递归与非递归效率)
- 递归的效率问题及递归与循环比较
- 递归效率
- StackOverflowError栈满--无线递归与OutOfMemoryError内存溢出
- [HDU] 3966 树状数组+启发式树链剖分
- java.lang.Exception: No runnable methods
- CodeForces
- C++继承和派生
- Linux内核参数解析
- Rust : 递归、效率与替代、溢出
- ubuntu 开启SSH服务
- 随机生成汉字图片
- 动态规划
- 进程间通讯--管道
- PHP学习笔记——使用回调函数处理数组函数array_map()
- 让php小白看的php类小程序
- Java动态代理
- Qt之QByteArray类学习