轻微狐臭怎么根治:斐波那契数列的算法

来源:百度文库 编辑:高校问答 时间:2024/04/30 03:34:30
用C语言写

递推法,递归法以及两者的效率比较。
两者效率比较需要说明原因,越具体越好!

#include<stdio.h>

void Fdt(long F1,long F2,int N);//递推
void Fdg(long F1,long F2,int N);//递归
main()
{
int n=20;
long f1,f2;
f1=f2=1;
Fdt(f1,f2,n);
printf("\n\n");
Fdg(f1,f2,n);

}
void Fdt(long F1,long F2,int N)//递推
{
for(int i=1;i<=N;i++)
{
printf("%12ld %12ld",F1,F2);
if(i%2==0)
printf("\n");
F1=F1+F2;
F2=F1+F2;
}
}
void Fdg(long F1,long F2,int N)//递归
{
if(N>=1)
{
printf("%12ld %12ld",F1,F2);
if(N%2==0)
printf("\n");
Fdg(F1+F2,F1+F2+F2,N-1);
}

}

肯定是递归算法:
#include <stdio.h>
#include <stdlib.h>

int fibonacci(int n)
{
if(n<0)
{
printf("bad arg!\n");
return -1;
}
else if( n==0 || n==1 )
return 1;

return fibonacci(n-1) + fibonacci(n-2);
}

int main(int argc, char *argv[])
{
int i, j, iRet, count = 0;

printf("Please input Number : ");
scanf("%d", &i);
printf("User input : %d\n", i);

for(j=1; j<=i; j++)
{
iRet = fibonacci(j);
count += iRet;
/*printf("Index %d value : %d\n", j, iRet);*/
}

printf("Count Value : %d\n", count);

return 0;
}

递归调用(java)
public class Fibonaci {
public static void main(String[] args){
for(int i=1;i<=20;i++){
System.out.println(func(i));
}
}

private static int func(int num){
if(num==1 || num==2) {
return 1;
} else {
return func(num-1)+func(num-2);
}
}
}

#include "stdio.h"
main()
{
long f1,f2;
int i;
f1=f2=1;
for(i=1;i<=20;i++)
{
printf("%12ld %12ld",f1,f2);
if(i%2==0) printf("\n"); /*控制输出,每行四个*/
f1=f1+f2; /*前两个月加起来赋值给第三个月*/
f2=f1+f2; /*前两个月加起来赋值给第三个月*/
}
}

原题是:有一对兔子从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?>

书上有