/*以下内容是在VC6.0环境下编译运行成功的,现在一般学习C语言均使用该环境*/
专注于为中小企业提供成都网站制作、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业庐山免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
#include stdafx.h
int Fibonacci(int n)
{ int m;
if(n==1||n==2)
m=1;
else
m=Fibonacci(n-1)+Fibonacci(n-2);//递归调用
return m;
}
int main(int argc, char* argv[])
{
int k;
for(k=1;k=20;k++)
{
printf(" %-10d",Fibonacci(k)); //数字左对齐效果,可以查看书本关于printf函数的输出格式
if(k%4==0)printf("\n"); //每行显示四个数字,可视化效果好些
}
return 0;
}
C语言源程序如下:
#includestdio.h
int main()
{
int array[100]={1,1};//斐波那契数列前两个元素均为0
int i=0;//循环变量
int n=20;//数列需要求的个数
int sum = 0;//和变量
for(i=2;in+1;i++)//按递推原理依次求出后续元素
{
array[i]=array[i-1]+array[i-2];//数列原理
}
printf("arr[1]-arr[%d] = ", n);//提示输出数列元素
for (i = 0; i n; i++)//遍历数列
{
printf("%d ",array[i]);//输出arr[1]-arr[n]元素内容
sum += array[i];//顺便进行求和
}
printf("\n%d ", sum);//输出求和结果
return 0;
}
程序运行结果如下:
扩展资料:
利用递归原理进行求斐波那契数列的求解和求前n项和:
#includestdio.h
int fibonacci(int n) //递归函数
{
if (n == 0 || n == 1)
return 1;
if (n 1)
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main()
{
int i = 0;
for (i = 0; i 30; i++)
{
printf("fibonacci(%d) = %d\n", i, fibonacci(i));
}
return 0;
}
asd(n)=asd(n-1)+asd(n-2)//到这里计算机不知道指为多少,但由定义继续往下算
=asd(n-2)+asd(n-3)+asd(n-3)+asd(n-4)//继续往下算
=asd(0)+……+asd(1)+……
算出结果
#includelt;iostream.hgt;
#includelt;iomanip.hgt;
long fibonacci(long,int);
void main(void)
{
int n;
coutlt;lt;"please input\"n\"";
cingt;gt;n;
coutlt;lt;endl;
if(fibonacci(n,1)==-1)coutlt;lt;"error message:nlt;0";
}
long fibonacci(long number,int out)
{
if(numberlt;0)
return-1;//return error message
else if(number==0)
return 0;
else if(number==1)
{
if(out)
coutlt;lt;numberlt;lt;setw(5);
return 1;
}
else
{
long lVal;
if(out)
lVal=fibonacci(number-2,0)+fibonacci(number-1,1);
else
lVal=fibonacci(number-2,0)+fibonacci(number-1,0);
if(out)
coutlt;lt;lVallt;lt;setw(5);
return lVal;
}
}
扩展资料:
斐波那契数列是一组第一位和第二位为1,从第三位开始,后一位是前两位和的一组递增数列,
像这样的:1、1、2、3、5、8、13、21、34、55......
今天,用四种方式来进行实现:
1.递归
int Fibon1(int n)
{
if(n==1||n==2)
{
return 1;
}
else
{
return Fibon1(n-1)+Fibon1(n-2);
}
}
int main()
{
int n=0;
int ret=0;
scanf("%d",n);
ret=Fibon1(n);
printf("ret=%d",ret);
return 0;
}
2.非递归
int Fibno2(int n)
{
int num1=1;
int num2=1;
int tmp=0;
int i=0;
if(nlt;3)
{
return 1;
}
else
{
for(i=0;igt;n-3;i++)
{
tmp=num1+num2;
num1=num2;
num2=tmp;
}
return tmp;
}
}
3.数组
public int Fibno3(int n)
{
Listlt;intgt;list=new Listlt;intgt;();
list.fib(1);
list.fib(1);
int count=list.Count;
while(countlt;n)
{
list.fib(list[count-2]+list[count-1]);
count=list.Count;
}
return list[count-1];
}
4.队列
public int Fibno4(int n)
{
Queuelt;intgt;queue=new Queuelt;intgt;();
queue.Enqueue(1);
queue.Enqueue(1);
for(int i=0;ilt;=n-2;i++)
{
queue.Enqueue(queue.AsQueryable().First()+queue.AsQueryable().Last());
queue.Dequeue();
}
return queue.Peek();
}
参考资料:
百度百科——斐波那契数列
此数列从第二项起,后一项的分子是前一项分子分母之和,分母是前一项分子。利用这一规律自定义一个递归函数求和。求和时将分子强制为double型以获得浮点商。代码如下:
#include "stdio.h"
double myfun(int m,int d,int n){//自定义前n项求和函数
if(n1)//若n1则递归调用
return (double)m/d+myfun(m+d,m,n-1);
return (double)m/d;//n==20时返回第20项m/d的浮点值
}
int main(int argc,char *argv[]){
printf("%f\n",myfun(2,1,20));//用第一项分子分母为2/1调用
return 0;
}
运行结果如下图:
#include "stdio.h"
double jc(double n)
{
if(n1)
return jc(n-1)*n;
else
return 1;
}
int main()
{
double i;
for(i=0;i=20;i++)
printf("%.0lf\n",jc(i));
}
再给一个完全用递归的:
#include "stdio.h"
double jc(double m,double n)
{
if(m1)
{
if(n1)
{
if(m==n)
printf("%.0lf\n",jc(m,n-1)*n);
else
return jc(m,n-1)*n;
}
else
{
if(m0)
jc(m-1,m-1);
return 1;
}
}
else
{
printf("1\n");
}
}
int main()
{
double s[20],m;
m=20;
jc(m,m);
}