斐波那契数列

1. 什么是斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……

2. 递归表达式

F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。

3. 代码

#include <stdio.h>
#include <stdlib.h>
int fib(int n)
{
if(n<=1)
{
    return 1;
}
else
{
    return fib(n-1)+fib(n-2);
}
}

int main()
{
int n,i;
long long result;
printf("Please input how many times you want the program to run\n");
scanf("%d",&n);
i=1;
while(i<=n)
{
    result=fib(i);
    printf("%lld ",result);
    i++;
}
return 0;
}

下面这部分程序是没有使用递归的

int main()
{
long long f1,f2,f3;
int n,i;

char c;

Restart:;

f1=1,f2=2;

printf("Please input how many times you want the program to run\n");
scanf("%d",&n);
if(n>=3)
{
    printf("%d %d ",f1,f2);
    for(i=1; i<=(n-2); i++)
    {
        f3=f1+f2;
        printf("%lld ",f3);
        f1=f2;
        f2=f3;
    }
}
else
{
    printf("Variable n must be not less than 2");
}

printf("\nRestart?(y/n)\n");
getchar();
scanf("%c",&c);
if(c=='y')
{
    goto Restart;
}

return 0;//我先写的这个,因为不知道什么叫递归,我以为就是循环结构,但是这个程序会有数据溢出,所以问了ai才搞懂什么是递归,应该用上面那个递归的
}

4. 运行结果截图

1. 10次

2. 100次

跑到这四五十次就已经跑不动了,一分多钟也就跑一半吧

查了一下递归算法的时间复杂度

那么循环算法的时间复杂度是O(n)?

5.调试查看堆栈情况

堆栈方面的知识学习参考了娄老师的博客

……cgdb出问题了?好像没有c语言i/oput的文件,在step调试中没法输入

修改一下代码,在固定次数下查看堆栈

没问题了

完成

posted @ 2023-11-01 20:30  20231413张桓溪  阅读(40)  评论(0编辑  收藏  举报