我们知道,斐波拉契数列用递归来写是非常简洁的,但是也带来了一个问题,那就是递归的调用可能会造成栈溢出,所以本文简单的探讨一下一个解决这个问题的方法:迭代法
#define _CRT_SECURE_NO_WARNINGS
//斐波那契:n=1||n=1:f(n)=1 n>2:f(n)=f(n-1)+f(n-2)
//尾递归!!!
//寻常递归容易造成栈溢出,试想一个递归使得这种问题解决
#include<stdio.h>
int f(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
else
{
return f(n-1)+f(n-2);
}
}
int f1(int n)
{
if
}
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
printf("\n递归写法的答案:%d\n", f(n));
if (n == 1 || n == 2)
{
printf("\n迭代写法的答案:1\n");
}
else if(n>2)
{
int c = 1;
int a=1,b=1;
for (int i = 0;i < n - 2;i++)
{
c = a + b;
a = b;
b = c;
}
printf("\n迭代写法的答案:%d\n", c);
}
}
return 0;
}