C语言编程问题:用Fibonacci数列为:1,1,2,3,5,8,13,....。
用Fibonacci数列为:1,1,2,3,5,8,13,....。用递归法编写求Fibonacci数的函数,在主函数中输入一个自然数,输出不小于该自然数的最小的一个Fi...
用Fibonacci数列为:1,1,2,3,5,8,13,....。用递归法编写求Fibonacci数的函数,在主函数中输入一个自然数,输出不小于该自然数的最小的一个Fibonacci数。
展开
3个回答
展开全部
修改一下max = cond+3;
========================
#include<stdio.h>
int fibonacci(int n)
{
if(n== 1 || n==2)
{
return 1;
}
else
{
return fibonacci(n-1) + fibonacci(n-2);
}
}
int main()
{
int cond;
int i = 1;
int max;
int val;
printf("请输入一个数:");
scanf("%d",&cond);
max = cond+3;
for(i=1; i<max; i++)
{
val = fibonacci(i);
printf("%d ",val);
if(val >= cond)
{
break;
}
}
printf("\n不小于自然数%d的最小的一个Fibonacci数为:%d\n",cond,val);
}
展开全部
int fibo(int n) {
if (n <= 2) return 1;
else return fibo(n - 1) + fibo(n - 2);
}
这是递归函数, 输入的n表示你要数列的第n项
main函数就自己写吧, 从小到大枚举就可以了, 懒得写了
另外稍微说一下, 如果追求效率的话, 可以在递归过程中缓存所有的运算结果, 用少量的空间换取巨大的效率提升, 还可以参考数列的通项公式, 对大概的项数进行一下预估
if (n <= 2) return 1;
else return fibo(n - 1) + fibo(n - 2);
}
这是递归函数, 输入的n表示你要数列的第n项
main函数就自己写吧, 从小到大枚举就可以了, 懒得写了
另外稍微说一下, 如果追求效率的话, 可以在递归过程中缓存所有的运算结果, 用少量的空间换取巨大的效率提升, 还可以参考数列的通项公式, 对大概的项数进行一下预估
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int n=5,a[];
scanf("%d",&n)
a[1]=1;
a[2]=1;
for [i=3;i<=n;i++]
{
a[i]=a[i-2]+a[i-1];
if a[i]>=n;
break;
}
printf("%d",a[i-1])
大概就是上面的思路吧,加点前缀什么的应该就可以了。
scanf("%d",&n)
a[1]=1;
a[2]=1;
for [i=3;i<=n;i++]
{
a[i]=a[i-2]+a[i-1];
if a[i]>=n;
break;
}
printf("%d",a[i-1])
大概就是上面的思路吧,加点前缀什么的应该就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询