第3关:兔子问题
题目描述:
求解Fibonacci数列的第110项、第200项的值。
测试输入: 110
预期输出: 26925748508234281076009
提示:
注意溢出及大数问题
第一项为 0 ,第二项为1
求解思路是 直接使用递归 ,但是数字过大会直接溢出
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int Fibonacci(int n);
int main()
{
int n;
int f;
scanf("%d",&n);
f = Fibonacci(n);
printf("%d",f);
return 0;
}
int Fibonacci(int n) {
if(n == 1)
{
return 0;
}
else if (n == 2)
{
return 1;
}
else {
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
找到了运行成功的代码,但是实在看不太懂,求问有没有人够解释一下
#include<stdio.h>
#define F1 300
#define F2 1000
int main()
{
//设置二维数组
int F[F1][F2]={0};
int k;
//输入较大值
scanf("%d",&k);
F[0][F2-1]=0;//第0行第299个为0
F[1][F2-1]=1;//第1行第299个为1
for(int d=2;d<k;d++) //需要相加的个数
{
for(int i=F2-1;i>=0;i--)
{
F[d][i]=F[d-1][i]+F[d-2][i];
// printf("%d\n",F[d][i]);
}
int r=F2-1;
//将其一个一个放入数组?
while(r>=0){
if(F[d][r]>=10)
{
F[d][r-1]+=1;
F[d][r]=F[d][r]-10;
}
r--;
}
}
for(int i = 0; i <= F1; i++){
for(int j = 0; j <= F2; j++) {
printf("%d ",F[i][j]);
}
printf("\n");
}
int j=0;
while(j<F2)
{
if(F[k-1][j]!=0)
{
while(j<F2)
{
printf("%d",F[k-1][j]);
j++;
}
}
j++;
}
return 0;
}