以下两个C程序(迭代和归纳)中哪一个更能有效地求出第n个斐波那契数?

以下两个C程序(迭代和归纳)中哪一个更能有效地求出第n个斐波那契数?,c,recursion,iteration,fibonacci,induction,C,Recursion,Iteration,Fibonacci,Induction,如上所述,试图找出以下两个程序中哪一个最能有效地找到第n个斐波那契数,以及为什么 斐波那契数是序列中的数字:1,1,2,3,5,8。。。其中前两个后面的每个数字是前两个数字的和 ////迭代//// int main() { int n; int t1 = 0; int t2 = 1; int i; int new_term; printf("Enter N :"); scanf("%d", &n); if (n == 1) new_term = 0; else if (n ==

如上所述,试图找出以下两个程序中哪一个最能有效地找到第n个斐波那契数,以及为什么

斐波那契数是序列中的数字:1,1,2,3,5,8。。。其中前两个后面的每个数字是前两个数字的和

////迭代////

int main()
{
int n;
int t1 = 0;
int t2 = 1;
int i;
int new_term;
printf("Enter N :");
scanf("%d", &n);
if (n == 1)
    new_term = 0;
else if (n == 2)
    new_term = 1;
else
{
    for (i = 3; i <= n; i++)
    {
        new_term = t1 + t2;
        t1 = t2;
        t2 = new_term;
    }
}
printf("%dth term of the series is %d", n, new_term);
return 0;
}

这是一个算法问题,必须视为一个问题

迭代版本将在步骤中找到其结果

对于递归版本,由于不使用备忘录,每个术语将被计算多次

假设Nn是生成第n个数的步骤数。你需要计算fibon-1和fib0n-2并求和。所以你需要Nn-1+Nn-2+1步骤。忽略最后一个和,得出Nn与已知为指数的fibon具有相同的数量级

优化的递归算法可以以在数组中存储数字为代价来计算fibon的步长。它们的效率仍然低于迭代方法,但您的幼稚算法将具有糟糕的性能


递归通常允许使用性能非常差的非常简单的算法。

这似乎是一个家庭作业问题,所以我不会回答它。但其中一个要比另一个有效得多,迭代可能要快得多,原因很明显。想一想,你会发现为什么你自己。当你计时的时候发生了什么?在运行CPU时检查CPU使用情况时发生了什么?当您运行它们时检查内存使用情况时发生了什么?您的递归解决方案不太正确f1是1如果您说您被卡在哪里,问题会更好。正如@ThingyWotsit所建议的,即使你不能分析程序,也很容易在不同的n值下运行它们,所以很难猜测问题出在哪里。
int fibo(int n);

int main() {
      int n;
    printf("Enter n : ");
    scanf("%d", &n);
    printf("The %dth term of Fibonacci sequence is %d", n, fibo(n));
    return 0;
}

int fibo(int n)
{
    if (n == 1) return 0;
    if (n == 2) return 1;
    return fibo(n - 1) + fibo(n - 2);
}