原题链接:[编程入门]有规律的数列求和
解题思路: 分子分母分别用递归函数生成斐波那契数,然后求和
注意事项:
参考代码:
#include<stdio.h>
float data_x(int n)
{
if (n == 1) return 2;
else if (n == 2) return 3;
else return data_x(n - 1) + data_x(n - 2);
}
float data_y(int n)
{
if (n == 1) return 1;
else if (n == 2) return 2;
return data_y(n - 1) + data_y(n - 2);
}
void sum(int n)
{
float x, y;
float sum = 0;
for (int i = 1; i <= n; i++)
{
x = data_x(i), y = data_y(i);
sum += x / y;
}
printf("%.2f", sum);
}
int main()
{
int N = 1;
scanf("%d", &N);
sum(N);
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#include<stdio.h> double data_x(int n) { if(n == 1) return 2; if(n == 2) return 3; double a = 2, b = 3, temp; for(int i = 3; i <= n; i++) { temp = a + b; a = b; b = temp; } return b; } double data_y(int n) { if(n == 1) return 1; if(n == 2) return 2; double a = 1, b = 2, temp; for(int i = 3; i <= n; i++) { temp = a + b; a = b; b = temp; } return b; } int main() { int n = 1; double sum = 0; scanf("%d", &n); if(n <= 0) printf("请输入>=1的正整数\n"); else { for(int i = 1; i <= n; i++) { sum = sum + data_x(i) / data_y(i); } printf("%.2f", sum); } return 0; }还是不要用递归兄弟们,用下面的方法更好,递归效率太低了,N值太大直接溢出了 // 使用迭代方法优化 data_x 函数 double data_x(int n) { if (n == 1) return 2; if (n == 2) return 3; double a = 2, b = 3, temp; for(int i = 3; i <= n; i++) { temp = a + b; a = b; b = temp; } return b; }