斐波那契数列的变形(大众点评2015校园招聘测试岗的第一道编程题)

       帮同学在线笔试做的,题目貌似是两个人同时从路两边开始给马路刷漆,一个人一天刷一米,另一个人一天刷3米。当马路长度为n米时,共有多少种刷法?

       看到题目的第一反应是很熟悉,以前做过类似的,然后脑海中突然闪过斐波那契,在网上搜了一下斐波那契,毕竟时间久了,细节记不得了,很顺利的写出了递推公式,写了个递归就搞定了。

 1 #include<iostream>
 2 using namespace std;
 3 int f(int n)
 4 {
 5 if(n==0) return 0;
 6 if(n==3) return 2;
 7 if(n==2) return 1;
 8 if(n==1) return 1;
 9 else
10 return f(n-1)+f(n-3);
11 
12 }
13 int main()
14 {
15 int n,sum;
16 while(1)
17 {
18 cout<<"请输入道路长度n"<<endl;
19 cin>>n;
20 if(n>=0)
21 {sum=f(n);
22 cout<<"油漆工刷路的方法有"<<sum<<"种。"<<endl;
23 }
24 else
25 cout<<"输入错误,请重新输入"<<endl;
26 }
27 }

自己做了简单的测试,发现n的数值在200左右,结果出的就比较慢了。题目还要求写个白盒测试的完整用例。

现在知道的情况是同学进面试了。。。。

原文地址:https://www.cnblogs.com/lanying/p/4035124.html