题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
程序分析:请抓住分子与分母的变化规律。
#include <stdio.h>
int main()
{
int i, t;
float sum = 0;
float a = 2, b = 1;
for (i = 1; i <= 20; i++)
{
sum = sum + a / b;
t = a;
a = a + b;
b = t;
}
printf("%9.6f\n", sum);
}
由规律可以看出,这其实是一个斐波那契数列的除法,我们可以直接用递归写一个斐波那契的通项。然后在求和。
//int Fibonacci(int a, int b, int n)
//{
// if (n < 0)
// {
// return 0;
// }
// else if (n == 1)
// {
// return 1;
// }
// else if (n == 2)
// {
// return b;
// }
// else
// {
// return Fibonacci(b, a + b, n - 1);
// }
//}
//
//int main(void)
//{
// float sum = 0;
// int i;
// for (i = 2; i < 22; i++)
// {
// float son = Fibonacci(1, 1, i + 1);
// float mother = Fibonacci(1, 1, i);
// // 这里不能直接用Fibonacci(1,1,i+1)/Fibonacci(1,1,i),不定义类型会返回一个整除的值,导致结果有误,这是个坑。
// sum = sum + son / mother;
// printf("%d/%d\n", Fibonacci(1, 1, i + 1), Fibonacci(1, 1, i));
// }
// printf("求和得 %9.6f", sum);
// return 0;
//}