用C语言 急需
解完加分
编制非递归函数,输出斐波那契数列前20项数据
答案:3 悬赏:40
解决时间 2021-03-14 14:19
- 提问者网友:我稀罕你
- 2021-03-13 15:31
最佳答案
- 二级知识专家网友:青春如此荒謬
- 2021-03-13 16:48
#include<stdio.h>
void fib(int n,int f0,int f1)
{
int f;//当前项
int i=0;
if(n<=0)return ;
if(n==1){ printf("%8d\n",f0); return; // 0}
if(n>=2)
printf("%8d,%8d",f0,f1);// f0 ,f1
for(i=2;i<n;i++) // 从第三项开始输出
{
f=f0+f1; // f(i) =f(i-2)+ f(i-1);斐波那契数列的递推公式;
f0=f1; // f0 =f(i-1), 下一轮循环 i++,所以 下一轮循环的i-2 本轮的i-1;
f1=f; // f1=f(i) ,下一轮循环 i++ ,所以 下一轮循环的i-1 本轮的i;
printf(",%8d",f);
}
printf("\n");
}
int main()
{ //必须知道前两项 1)0,1;2)1,1;3)1,2;
//这里为0,1;
fib(20,0,1);
return 0;
}
PS:利用数组实现的也不错,但是斐波那契数列增长很快,
我这个,和用数组的都会溢出。
如果项数很多的话,可能需要用64位整数计算,或者高精度的大整数计算。
void fib(int n,int f0,int f1)
{
int f;//当前项
int i=0;
if(n<=0)return ;
if(n==1){ printf("%8d\n",f0); return; // 0}
if(n>=2)
printf("%8d,%8d",f0,f1);// f0 ,f1
for(i=2;i<n;i++) // 从第三项开始输出
{
f=f0+f1; // f(i) =f(i-2)+ f(i-1);斐波那契数列的递推公式;
f0=f1; // f0 =f(i-1), 下一轮循环 i++,所以 下一轮循环的i-2 本轮的i-1;
f1=f; // f1=f(i) ,下一轮循环 i++ ,所以 下一轮循环的i-1 本轮的i;
printf(",%8d",f);
}
printf("\n");
}
int main()
{ //必须知道前两项 1)0,1;2)1,1;3)1,2;
//这里为0,1;
fib(20,0,1);
return 0;
}
PS:利用数组实现的也不错,但是斐波那契数列增长很快,
我这个,和用数组的都会溢出。
如果项数很多的话,可能需要用64位整数计算,或者高精度的大整数计算。
全部回答
- 1楼网友:不傲怎称霸
- 2021-03-13 18:33
#include <stdio.h>
#define NUM 20
int main()
{
int i;
long fib[NUM] = {1,1};
for(i=2;i<NUM;i++)
{
fib[i] = fib[i-1]+fib[i-2];
}
for(i=0;i<NUM;i++)
{
printf("第%d个斐波那契数:%d\n", i, fib[i]);
}
getch();
return 0;
}
- 2楼网友:修女的自白
- 2021-03-13 18:23
#include
#define col 5 //一行输出5个
long fibonacci(int n)
{ //fibonacci函数的递归函数
if (0==n||1==n) { //fibonacci函数递归的出口
return 1;
}
else {
return fibonacci(n-1)+fibonacci(n-2);
//反复递归自身函数直到碰到出口处再返回就能计算出第n项的值
}
}
int main(void)
{
int i,n;
n= 17;
printf("fibonacci数列的前%d项\n", n);
for (i=0; i
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯