还是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 codematch 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 codelet 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)
}

Rust : 递归、效率与替代、溢出相关推荐

  1. 转载 foreach比递归效率低

    转载原文于phpchina 刚在phpcms函数文件看到一个将数组转换为序列化的url函数,使用了三层foreach实现,我就很奇怪,为什么不用递归,群里面问了问,有几位朋友说是递归效率差,所以就做了 ...

  2. Javascript中递归造成的堆栈溢出及解决方案

    Javascript中递归造成的堆栈溢出及解决方案 参考文章: (1)Javascript中递归造成的堆栈溢出及解决方案 (2)https://www.cnblogs.com/cuew1987/p/4 ...

  3. 递归优化php,PHP 递归效率分析

    PHP的递归效率一般认为是低效的.大概一年前,我写了一篇博文,对三种遍历树的方法进行了比较,发现递归算法的效率最低. 而且是差了3倍的效率.所以,PHP中的递归一定要小心的对待. 最近写了一个快速排序 ...

  4. 一行“无用”的枚举反使Rust执行效率提升10%,编程到最后都是极致的艺术!

    最近不少读者都留言说博客中的代码越来越返璞归真,但讨论的问题反倒越来越高大上了,从并发到乱序执行再到内存布局各种放飞自我. 其实这倒不是什么放飞,只是Rust对我来说学习门槛太高了,学习过程中的挫败感 ...

  5. 【前端】递归之引起堆栈溢出解决方案

    简介:递归引起错误VM434:1 Uncaught RangeError: Maximum call stack size exceeded 优化前递归 ``` function obj(x,y){i ...

  6. python sobel滤波_python - 如何提高sobel边缘检测器的效率 - 堆栈内存溢出

    即使您正在构建自己的库,您也绝对应该使用库进行卷积,它们将在后端用C或Fortran进行结果运算,这将大大加快速度. 但是,如果您愿意,可以自己做,使用线性可分离滤波器. 这是想法: 图片: 1 2 ...

  7. php 效率最高的递归,PHP 递归效率分析_PHP教程 - microtime

    ...这些数加上1的值的时间.// for 的方法$t1 = microtime(true);for ($i = 0; $i < $max; $i++) {$temp = $temp + 1;} ...

  8. 递归的效率问题及递归与循环比较

    1.所谓的递归慢到底是什么原因呢? 大家都知道递归的实现是通过调用函数本身,函数调用的时候,每次调用时要做地址保存,参数传递等,这是通过一个递归工作栈实现的.具体是每次调用函数本身要保存的内容包括:局 ...

  9. 【PHP】php 递归、效率和分析

    递归的定义 递归(http:/en.wikipedia.org/wiki/Recursive)是一种函数调用自身(直接或间接)的一种机制,这种强大的思想可以把某些复杂的概念变得极为简单.在计算机科学之 ...

  10. Python|装饰器|执行时间|递归|动态属性|静态方法和类|继承和多态|isinstance类型判断|溢出|“魔法”方法|语言基础50课:学习记录(6)-函数的高级应用、面向对象编程、进阶及应用

    文章目录 系列目录 原项目地址: 第16课:函数的高级应用 装饰器(记录执行时间的例子) 递归调用 简单的总结 第17课:面向对象编程入门 类和对象 定义类 创建和使用对象 初始化方法 打印对象 面向 ...

最新文章

  1. 浏览器--如何让登陆页面的表单不默认显示账号和密码
  2. CAS集成oauth2协议的支持
  3. WebService实例-CRM系统提供WebService实现用户注册功能
  4. 无法想mysql进行插入_mysql 无法插入中文
  5. 计算机网络基本操作命令的使用,计算机网络-路由器基本命令操作实验指导书--华为...
  6. python模拟百度搜索点击链接_python采集百度搜索结果带有特定URL的链接代码实例...
  7. su命令\sudo命令\限制root远程登录
  8. Thrift 对象序列化、反序列化-字节数组分析
  9. mysql数据恢复或数据找回方法
  10. c语言浮点数输出格式的控制,c语言输出格式控制
  11. Flash地址空间的数据读取——STM32
  12. 阿里云实现短信验证码登录
  13. Redis 报错: WRONGTYPE Operation against a key holding the wrong kind of value
  14. 微信小程序html格式转换详解
  15. ITIL Expert
  16. URI URL区别及转换
  17. 雨林木风 Windows server 2003
  18. 《富爸爸巴比伦最富有的人》读书笔记3000字
  19. java三国赵云游戏副本_三国乱世手游轻松拿下赵云副本讲解
  20. 一个模型,帮你提升行动力

热门文章

  1. Codeforces Round #253 DIV1 C 馋
  2. 为什么你作为一个.NET的程序员工资那么低?
  3. CF989C A Mist of Florescence
  4. 【Codeforces Round #299 (Div. 2) C】 Tavas and Karafs
  5. Golang包管理工具glide简介
  6. Python开发之用户密码存储
  7. Ubuntu 汉化及kate汉化和使用自带终端的解决方式
  8. 操作DataTable
  9. 190816每日一句
  10. excel 绘制突显的饼图