Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Time complexity 计算斐波那契级数需要多少时间?_Time Complexity_Pseudocode_Fibonacci - Fatal编程技术网

Time complexity 计算斐波那契级数需要多少时间?

Time complexity 计算斐波那契级数需要多少时间?,time-complexity,pseudocode,fibonacci,Time Complexity,Pseudocode,Fibonacci,我已经通过应用蛮力技术创建了递归调用树,但是当我给这个算法100个值时,它需要万亿年的时间来计算 你们建议我做的是,它通过给出100个值来快速运行 以下是我迄今为止所做的工作 function fib(n) { if (n =< 1) { return n; } else { return fib(n - 1) + fib(n - 2); } } 函数fib(n){ 如果(n=

我已经通过应用蛮力技术创建了递归调用树,但是当我给这个算法100个值时,它需要万亿年的时间来计算

你们建议我做的是,它通过给出100个值来快速运行

以下是我迄今为止所做的工作

function fib(n) {
    if (n =< 1) {
      return n;
    } else {
        return fib(n - 1) + fib(n - 2);
    }
}
函数fib(n){
如果(n=<1){
返回n;
}否则{
返回fib(n-1)+fib(n-2);
}
}
你可以有一个“缓存”,在那里你可以保存已经计算过的斐波那契数。每次你尝试计算

fib(n-1) /* or */ fib(n-2) ;
您首先要查看已计算的数字数组。如果它在那里,你可以节省很多时间。 因此,每次计算斐波那契数时,请将其保存到数组或列表中相应的索引处

function fib(n) 
{

if (n =< 1) 
{
  return n;
}
if(fiboList[n] != defaultValue)
{
  return fiboList[n];
}
else 
{
    int fibo = fib(n-1) + fib(n-2);
    fiboList[n] = fibo;
    return fibo;
}

}
函数fib(n)
{
如果(n=<1)
{
返回n;
}
如果(fiboList[n]!=defaultValue)
{
返回纤维分子[n];
}
其他的
{
int-fibo=fib(n-1)+fib(n-2);
fiboList[n]=fibo;
返回fibo;
}
}

您也可以通过循环来完成:

int a = 1;
int b = 1;
for(int i = 2; i < 100; i++){
    int temp = a + b;
    a = b;
    b = temp;
}
System.out.println("Fib 100 is: "+b);
inta=1;
int b=1;
对于(int i=2;i<100;i++){
内部温度=a+b;
a=b;
b=温度;
}
系统输出打印项次(“Fib 100为:”+b);
运行时是线性的,避免了递归调用造成的开销


编辑:请注意结果是错误的。由于Fib(100)大于Integer.MAX_值,您必须使用biginger或类似值才能获得正确的输出,但“逻辑”将保持不变。

“万亿年”-您的输入是什么?有高效的算法来计算斐波那契数。你所需要做的就是在询问之前用谷歌搜索一下。记忆技术也可能很有用。这里你所说的defaultValue是什么意思?例如,无论你选择什么,它都可以是-1。你的想法是创建一个数组,然后用一个defaultValue初始化数组中的每个数字,比如-1。所以,如果数组[n]是-1,您就知道那个特定的斐波那契数还没有计算出来。如果你在数组[n]中发现一个不同的值,那就是fibo[n]的结果,所以你不必一直递归。请解释为什么你的答案比已经存在的更好。
def fib_seq(x):  
    a,b = 1,1
    while x>1:
        a,b=b,a+b
        x-=1
    print(b)