关于斐波那契数列的面试题(附图解)
前言
本文给大家介绍与斐波那契数列有关的面试题(图解)
一、斐波那契数列是什么?
简单来说就是第一个fib数+第二个fib数=第三个fib数(前两个数除外均为1)
二、求第n个斐波那契数列(两种方法)
1.第一种方法
代码如下(示例):
int fib(int n)
{
int a = 1;
int b = 1;
int c = 1;
while (n > 2)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = fib(n);
printf("%d\n", ret);
return 0;
}
2.第二种方法(递归)
代码如下(示例):
int fib(int n)
{
if (n <= 2)
return 1;
else
return fib(n - 1) + fib(n -2);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = fib(n);
printf("%d\n", ret);
return 0;
}
三、斐波那契数列面试题(图解)
题目如下(示例):
输入如下(示例):
输入一个正整数N(1<=n<=1000 000) eg:输入7
输出如下(示例):
eg:离8最近,相差1个单位长度
代码如下(示例):
//求一个数离它最近的fib数的距离
int main()
{
int a = 0;
int b = 1;
int c = 1;
int n = 0;
scanf("%d", &n);
while (1)
{
if (b == n)
{
//n就是fib数
printf("0\n");//距离为0
break;
}
else if (b > n)
{
if (abs(a - n) > abs(b - n))
{
printf("离%d最近,相差%d个单位长度\n", b, abs(b - n));
}
else
{
printf("离%d最近,相差%d个单位长度\n", a, abs(a - n));
}
break;
}
a = b;
b = c;
c = a + b;
}
}
在这里我们会用到abs函数转化成绝对值的形式!
总结
例如:以上就是今天要讲的内容,本文介绍了斐波那契数列的一些面试题的解法和图解,如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!