当前位置: 首页 > news >正文

你还在迭代和递归吗?

当你解决一个问题的时候,如果能够递归,你可能很快就写出一个简洁的程序。每当我们对自己新想出来的递归或迭代算法自我陶醉的时候,是否想过还有更加高效的算法?

其实大多数递归或迭代的问题都能转化为非递归算法。更厉害的算法复杂度可以降到O(1)。不信请看下面例子。


(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。
(2)一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个n级的台阶总共有多少种跳法?

毋庸置疑,第一个不就是斐波那契数列么。难道我们又要递归或者迭代了吗?那么第二个呢?要知道递归付出的时间是惨重的!其实很多递推公式都可以解成关于N的函数,这个在组合数学这门课中会详细介绍。

附上上面两个问题的代码:

double Fib(int n){ return (5 + sqrt(5.0)) / 10 * pow((1 + sqrt(5.0)) / 2, n) + (5 - sqrt(5.0)) / 10 * pow((1 - sqrt(5.0)) / 2, n); } double NB_Fib(int n){ return pow(2.0, n - 1); }
所以以后在遇到递归和迭代的时候,首先想想是否可解。切莫直接递归啊!


相关文章:

  • 受欢迎的牛
  • appium自动化安装(一)
  • Template Method模板方法
  • UVA 10603 倒水问题
  • 程序员编程艺术第二十六章:基于给定的文档生成倒排索引(含源码下载)
  • Flume数据采集准备
  • 【Android】Menu不同菜单的使用介绍
  • python初识
  • Elasticsearch教程收集
  • 巧用Chrome格式化压缩后的js文件
  • 通过LoadBalancerClient获取所有服务列表的IP
  • HPUX Error 23 File table overflow
  • dockerfile 构建tomcat
  • 解决内存设置过大导致实例无法启动ORA-27100
  • Python输出输入
  • @jsonView过滤属性
  • 【comparator, comparable】小总结
  • 10个确保微服务与容器安全的最佳实践
  • android 一些 utils
  • DOM的那些事
  • GraphQL学习过程应该是这样的
  • ucore操作系统实验笔记 - 重新理解中断
  • windows-nginx-https-本地配置
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 精彩代码 vue.js
  • 一天一个设计模式之JS实现——适配器模式
  • ​如何防止网络攻击?
  • #微信小程序:微信小程序常见的配置传旨
  • (42)STM32——LCD显示屏实验笔记
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (C#)一个最简单的链表类
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (转)ORM
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)Unity3DUnity3D在android下调试
  • (转)VC++中ondraw在什么时候调用的
  • *** 2003
  • .NET 5种线程安全集合
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net wcf memory gates checking failed
  • .NET 材料检测系统崩溃分析
  • .NET微信公众号开发-2.0创建自定义菜单
  • .net下简单快捷的数值高低位切换
  • /bin/rm: 参数列表过长"的解决办法
  • /proc/vmstat 详解
  • @Transaction注解失效的几种场景(附有示例代码)
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [100天算法】-不同路径 III(day 73)
  • [2018-01-08] Python强化周的第一天
  • [30期] 我的学习方法
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [BROADCASTING]tensor的扩散机制