递归的理解【爱奇艺2017年校招笔试题 第一道编程题】
2016-09-18 21:27
369 查看
#include<iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int getMax(vector <int> vec)//求最大值
{
return *max_element(vec.begin(),vec.end());
}
int getMin(vector <int> vec)//求最小值
{
return *min_element(vec.begin(), vec.end());
}
//判断数组vec的元素顺序是否符合小明的游玩策略,每一次都将元素进行二分,如果能够找到一组的最小值比一组的最大值还大,则说明可以这样分批玩,否则
//当前玩耍的顺序是和小明之前的策略不吻合的。
bool judge(vector<int> vec)
{
int len=vec.size();
if (len<=2)
{
return true;
}
int i;
bool state;
for (i = 1; i < len;i++)
{
vector<int> left(vec.begin(), vec.begin() + i);//分成两个数组
vector<int> right(vec.begin()+i, vec.end());
/*
此处是我最初的代码:
for (i = 1; i < len;i++)
{
vector<int> left(vec.begin(), vec.begin() + i);//分成两个数组
vector<int> right(vec.begin()+i, vec.end());
if (getMax(left) < getMin(right) || getMin(left) > getMax(right))
{
if (judge(left) == false)
return false;
if(judge(right) == false)
return false;
}
}
return false;
其中体现了我在递归上犯的错误,首先,我的本意是如果当前数组顺序违反了小明的策略,那就直接回退,并返回false,否则就是默认的符合小明的策略,但是我之前并没有
默认的state值,而且,就算有了默认的state值,也无法返回,因为整个过程当中,我一直没有返回true的情况,所以,在分支判断的时候,我并没有考虑完整,所以,在left和right都没有违反小明的策略的时候,应该返回true。
*/
if (getMax(left) < getMin(right) || getMin(left) > getMax(right))
{
if (judge(left) == false)
return false;
else if(judge(right) == false)
return false;
else
return true;
}
}
return false;
}
int main()
{
vector<int> vec(10);
vector<int>::iterator it;
for (it = vec.begin(); it != vec.end();it++)
{
cin >> *it;
}
bool yes_or_no=true;
yes_or_no = judge(vec);
cout << yes_or_no << endl;
return 0;
}
平时编程很少使用递归,这次一用才发现自己的不足,具体的分析都在代码里面了。
相关文章推荐
- 2017年校招全国统一模拟笔试(第四场)编程题集合--Python
- 2017年校招全国统一模拟笔试(第三场)编程题集合
- 2017年校招全国统一模拟笔试(第一场)编程题集合——循环单词
- 牛客网2017年校招全国统一模拟笔试(第一场)编程题集合
- 2017年校招全国统一模拟笔试(第一场)编程题集合——超级素数幂
- 2017年校招全国统一模拟笔试(第一场)编程题集合--Python
- 2017年网易校招笔试编程题第二题
- 2017年校招全国统一模拟笔试(第一场)编程题集合——好多鱼
- 2017年搜狗校招Java研发笔试编程题
- 2017年网易校招笔试编程题第一题
- 笔试题:2017.9.10爱奇艺校招编程题【平方串】解题思路
- 2017年校招全国统一模拟笔试(第一场)编程题集合——连续整数
- 牛客网2017年校招全国统一模拟笔试(第一场)编程题 -- 好多鱼!
- 2017年携程旅游校招Java研发笔试编程题(3个)
- 牛客网2017年校招全国统一模拟笔试(第一场)编程题集合
- 2017年爱奇艺校招模拟笔试编程
- 2017年校招全国统一模拟笔试(第三场)编程题集合--Python
- 2017年校招全国统一模拟笔试(第二场)编程题集合--Python
- 【2018校招美团内推笔试编程题1】K的倍数
- 笔试实践2---2017年网易在线笔试之编程题