斐波那契数列
1.定义:
第一个和第二位为1,从第三位开始,每后一位数都是前两位数字之和。即1 1 2 3 5 8 13…
2.用递归函数 ——在函数体内调用自身
(1) 执行递归函数将反复调用其自身,每调用一次就进入新的一层,如下图
(2)特点
- 每调用一次,函数都有变量的改变,但代码不会得到复制
- 每次调用,函数都会将值返回,然后进行下一次
- 递归函数必须有终止语句
- 总结:递归函数有自我调用能力并且有完成状态
(3) 代码实现
int Fibonacci(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
else
{
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
int main()
{
int n = 0;
int count = 0;
scanf("%d", &n);
count = Fibonacci(n);
printf("ret=%d", count);
return 0;
}
3 、用数组
补充: 断言
assert();//需要加头文件#include<assert.h>
如果括号中的断言为真,则程序正常运行;
如果断言为假,程序崩溃会直接定位到错误点,方便纠错
void Fibonacci(int arr[], int arrsize)
{
assert(arrsize >= 2);
if (arrsize < 0)
{
return ;
}
arr[0] = 1;
arr[1] = 1;
for (int i = 2; i < arrsize; i++)
{
arr[i] = arr[i - 1] + arr[i - 2];
}
}
int main()
{
int arr[10];
Fibonacci(arr, sizeof(arr) / sizeof(arr[0]));
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
3、用循环
int Fibonacci(int n)
{
int i;
int a1 = 1;
int a2 = 1;
int a3 = 1;
for (i = 2; i<n; i++)
{
a3 = a1 + a2;
a1 = a2;
a2 = a3;
}
return a3;
}
int main()
{
for (int i = 1; i<7; i++)
{
printf("%3d", Fibonacci(i));
}
printf("\n");
return 0;
}