裴波那契数列 JavaScript 尾递归实现
2024-08-24 06:27:16
一般递归实现 :
- //经典递归
- function fibonacci(n) {
- return (function(n) {
- if (n == 1 || n == 2)
- return 1;
- return arguments.callee(n - 1) + arguments.callee(n - 2);
- })(n);
- }
或者:
function fibonacci(n){
if(n<2)
return n;
else
return fibonacci(n-1)+fibonacci(n-2);
}
尾递归实现:
- //尾递归
- function fibonacci(n){
- return (function(n1, n2, i){
- return (i < n) ? arguments.callee(n2, n1+n2, i+1) : n1;
- })(1,1,1);
- }
跟这样的迭代方法是完全等价的:
- //等价的循环
- function fibonacci(n){
- var n1 = n2 = s = i = 1;
- for(; i<n; i++){
- s = n1 + n2;
- n1 = n2;
- n2 = s;
- }
- return n1;
- }
C# 版:
传统的递归方式如下:
public static int FibonacciRecursively(int n)
{
if (n < 2) return n;
return FibonacciRecursively(n - 1) + FibonacciRecursively(n - 2);
}
而改造成尾递归,我们则需要提供两个累加器:
public static int FibonacciTailRecursively(int n, int acc1, int acc2)
{
if (n == 0) return acc1;
return FibonacciTailRecursively(n - 1, acc2, acc1 + acc2);
}
最新文章
- JS继承之原型继承
- 为什么 Java 8 中不再需要 StringBuilder 拼接字符串
- php sleep()的实时输出打印,清除ob缓冲区
- chrome浏览器首页被hao123劫持解决办法
- 【转】CentOS6.3安装Broadcom无线网卡驱动
- VR制作的规格分析
- Hibernate中的一对一映射
- Oracle VM Virtual Box 4.3 小巧精悍的虚拟机软件
- oc语言学习之基础知识点介绍(三):类方法、封装以及继承的介绍
- optimize table-2
- Java:Date、Calendar、Timestamp的使用
- jsRender模板引擎
- protubuffer for windows配置指南!
- java配置文件的读写
- 短视频服务大PK,阿里云、腾讯云、又拍云、七牛云、金山云5强横向对比
- POJ 2449 Dijstra + A* K短路
- [maven(1)]myeclipse2014下如何配置maven
- [物理学与PDEs]第1章习题9 磁偶极矩的极限矢势
- .NET Core 全新认识(转载)
- python学习之struct模块