题目描述
输入一个正整数n,求Fibonacci数列的第n个数。Fibonacci数列的特点:第1,2个数为1,1。从第3个数开始,概述是前面两个数之和。即:
要求输入的正整数n不超过50.
输入
一个不超过50的正整数
输出
Fibonacci数列的第n个数,末尾输出换行。
样例输入
20
样例输出
6765
错误代码!!!
刚开始写,想利用函数,在外部写一个Fibonacci(n),然后递归调用,但是这里每一次都会输出一个数字,而不是累加到所需要的数字。
#include "pch.h"
#include <stdio.h>
#include <math.h>
int Fibonacci(int n)
{
int f;
if (n == 1 || n == 2)
f = 1;
else
f = Fibonacci(n - 1) + Fibonacci(n - 2);
printf("%d", f);
return 0;
}
int main()
{
int n,f;
scanf_s("%d", &n);
if (n <= 50)
Fibonacci(n);
return 0;
}
正确代码:(利用函数)
#include <stdio.h>
#include <math.h>
int Fibonacci(int n)
{
int f;
if (n == 1 || n == 2)
return 1;
else
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
int main()
{
int n,f;
scanf_s("%d", &n);
if (n <= 50)
printf("%d",Fibonacci(n));
return 0;
}
利用循环结构求解前n项的数列和:
#include <stdio.h>
int main()
{
int i, n, f1=1, f2=1, f3;
scanf_s("%d", &n);
if (n > 2 && n <= 50)
{
for (i = 3; i <= n; i++)
{
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
printf("%d", f3);
}
if (n == 1 || n == 2)
printf("%d", f1);
return 0;
}