帮忙简化一个递归

hbxtght 2010-12-08 07:48:53
#include<stdio.h>

float A(float n);
float b;
int main()
{
int n;
float sum,a,b,i;
scanf("%d",&n);
sum=a=b=0.0;
for(i=1.0;i<=n;i++)
{
a=A(i+2);
b=A(i+1);
sum=sum+a/b;
}
printf("%.3f\n",sum);

return 0;
}
float A(float n)
{
if(n==1.0||n==2.0)
return 1.0;
else
{
n=A(n-1)+A(n-2);
return n;
}
}
题目是要求:有一个分数数列:2/1,3/2,5/3,8/5,13/8,21/13,……求出这个数列前n项之和
请帮忙简化一下,缩短程序运行时间(仍是用递归)
...全文
58 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
熊熊大叔 2010-12-08
  • 打赏
  • 举报
回复

#include<stdio.h>

float A(int n, float f1, float f2);
int main()
{
int n;
float sum;
scanf("%d",&n);
sum = A(n, 1.0, 2.0);
printf("%.3f\n",sum);
return 0;
}
float A(int n, float f1, float f2)
{
if (1 == n)
return f2/f1;
else
return f2/f1 + A(n-1, f2, f1+f2);
}
libinfei8848 2010-12-08
  • 打赏
  • 举报
回复
把递归改成循环迭代
無_1024 2010-12-08
  • 打赏
  • 举报
回复

#include <stdio.h>

long double Fibonacci(int n)// recursion
{
if( n < 0 )
{
printf("ERROR\n");
return 0;
}
else if( n < 2 )
return 1;
else
return ( Fibonacci(n-1) + Fibonacci(n-2) );
}
int main()
{
int n ;
long double sum = 0,a,b;
printf("input n: ");
b = Fibonacci(1);
scanf("%d",&n);//记录上一次的分母的值 来减少一次递归 缩短时间
for(int i = 0; i < n ; i++ )
{
a = b;
b = Fibonacci(i+2);
sum += b / a;
//sum += Fibonacci(i+2) / Fibonacci(i+1);
}
printf("%lf\n",sum);
return 0;
}

我只能写出这个了 时间按复杂度比你那个应该小一点
hbxtght 2010-12-08
  • 打赏
  • 举报
回复
题目在代码下面,有一个分数数列:2/1,3/2,5/3,8/5,13/8,21/13,……求出这个数列前n项之和
無_1024 2010-12-08
  • 打赏
  • 举报
回复
啥意思 没弄懂

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧