fib函数用迭代替换递归

news/2024/7/7 20:01:35

fib函数递归实现:

        long Fib(long n) 
{
if (n <= 1)
{
return n;
}
else
{
var t1 = Fib(n - 1);
var t2 = Fib(n - 2);

return t1+ t2;
}

}

fib函数改为迭代:

    class Class1
{
class Node
{
public Node(long n, int pos)
{
this.n = n;
this.retStatus = pos;
}

public long n; //参数
public int retStatus;
//0,表示temp中没有保存值
//1, 表示temp中保存了栈顶记录的t1值。
//2,表示temp中保存了栈顶记录的t2值。

public long ret; //返回值
public long t1; //存第一次调用Fib的返回值
public long t2; //存第二次调用Fib的返回值
}

long Fib(int n)
{
long temp = 0;

var s = new Stack<Node>();
s.Push(new Node(n, 0));

while (s.Count > 0)
{
Node top = s.Peek();

switch (top.retStatus)
{
case 0:
if (n <= 1)
{
top.ret = n;
temp = top.ret;
s.Pop();
}
else
{
top.retStatus = 1;
s.Push(new Node(n - 1, 0));
}
break;
case 1:
top.t1 = temp;

top.retStatus = 2;
s.Push(new Node(n - 2, 0));
break;
case 2:
top.t2 = temp;

top.ret = top.t1 + top.t2;
temp = top.ret;
s.Pop();
break;
}

}
return temp;

}

}



转载于:https://www.cnblogs.com/cuishengli/archive/2012/03/02/2377714.html


http://www.niftyadmin.cn/n/1123765.html

相关文章

Java四种线程池

线程池的好处 1、线程的创建需要消耗的&#xff0c;用完了马上就扔了比较可惜&#xff0c;所以把它缓存起来&#xff0c;以后还能再用&#xff1b; 2、可以根据实际情况调整线程池的大小&#xff0c;防止线程太多&#xff1b; 3、有些场合可以用线程池来做同步&#xff08;比如…

HDU-2896 病毒侵袭(AC自动姬)

病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 28243 Accepted Submission(s): 6538 Problem Description当太阳的光辉逐渐被月亮遮蔽&#xff0c;世界失去了光明&#xff0c;大地迎来最黑暗的时刻。…

Aruba无线网络学习(二)

说明&#xff1a;工作过程中接触到了Aruba无线网络设备&#xff0c;并在其网站上下载了技术文档。文档是英文的&#xff0c;看起来有一点费劲。只好一边翻译&#xff0c;一边学习&#xff0c;一边记笔记。水平有限&#xff0c;难免有错误的地方&#xff0c;请大家帮助指正。七、…

四种ABAP数据对象(转)

在ABAP/4中可以使用四种数据对象 1、内部数据对象 创建内部数据对象供在特定的程序中使用&#xff0c;在该程序之外无效&#xff0c;包括文字、常量、变量 &#xff08;1&#xff09;文字 文字是固定值&#xff0c;分为文本文字和数字文字。文本文字是单引号内的字母数字字符序…

Linux速成教程

2019独角兽企业重金招聘Python工程师标准>>> Linux操作系统最为有名的是它对初学者不友好&#xff01;当用户开始接触Linux会感觉到迷惑不解&#xff1a;"Linux凭什么得到广泛应用&#xff0c;还如此声名显赫&#xff1f;" 1.终端和shell 2.常见的使用Lin…

截取与分析日志文件的特定行数的操作

在进行操作系统和数据库系统管理时经常会遇到在日志文件中查找某个字符或者按照时间截取某个时间段的日志进行分析。今天早上就遇到一个MySQL数据库上的问题mysql数据库在0-3点的时候数据库会话连接tpscpu和iowait等都比平时大了许多。为了定位这个时间段内到底发生了那些慢查询…

如何在Linux中查看所有正在运行的进程

你可以使用ps命令。它能显示当前运行中进程的相关信息&#xff0c;包括进程的PID。Linux和UNIX都支持ps命令&#xff0c;显示所有运行中进程的相关信息。ps命令能提供一份当前进程的快照。如果你想状态可以自动刷新&#xff0c;可以使用top命令。 ps命令 输入下面的ps命令&…

WinXP上无法应用WinSrv2008的活动目录组策略的解决办法

去年7月份&#xff0c;做了一次活动目录升级项目&#xff0c;由于他们的环境比较早&#xff0c;两台DC都是Win2000。此次项目的目标就是将域升级到Win2008环境。在项目中碰到诸多困难&#xff0c;最终都一一解决&#xff0c;其中有个之前没有料想到的问题&#xff0c;我觉得有必…