是否是斐波纳契系列递归?如果不告诉如何

时间:2014-12-03 12:49:49

标签: java

此代码适用于10个以下斐波那契数字。但我想知道这是递归函数与否。斐波那契系列的基本公式为f(n)=f(n-1)+f(n-2)。使用这个我想要一个斐波纳契程序。我试过这个,但时间的复杂性更多的是在程序之上几乎没有变化的原因。

int n=10,i,f0=1,f1=1,f2;

for(i=1;i<=n;i++)
{
  System.out.println(f0);
  f2=f0+f1;
  f0=f1;
  f1=f2;
  f2=f0;
}

4 个答案:

答案 0 :(得分:4)

根据定义,递归是一个调用自身的函数(直接或间接)。

println()之外,您的程序中没有函数调用。因此不,它不是递归的。

这是一个简单的迭代算法。

事实上,直接的递归实现对于这个问题不是一个好的选择,因为它会具有指数时间复杂度。

答案 1 :(得分:0)

这是迭代,因为你有循环,你不是一次又一次地调用相同的方法。如果您有类似方法调用自身的方法,您可以将方法称为resursive,如下所示:

public int addNumbers(int number) {
    if (number <= 0) {
        return 0;
    }
    return number + addNumbers(number - 1);
}

答案 2 :(得分:0)

这不是递归的,因为该函数不会自己调用

这是:

int fib(int n){
  if(n<2)
    return n;
  return fib(n-1) + fib(n-2);
}

正如您所看到的方法fib自称:fib(n-1)fib(n-2)

答案 3 :(得分:0)

这不是递归,因为没有直接或间接的递归调用。基于较小参数的结果(也称为dynamic programming)迭代地完成评估。但是,在此实现中,并非所有中间结果都保留,因此只需要一定数量的变量。