递归问题帮助c++
Recursion problem help C++
我正试图编写代码来检查您是否可以通过遵循一定的规则到达数组的末尾。你从整数数组的第一个元素开始,存储在这个位置上的数字就是你可以向前或向后跳多少次。目标是到达由0值表示的Vector的末尾。
bool Solvable(int start, Vector<int> & squares) {
int steps = squares[start];
int prev = start - steps;
int forward = start + steps;
if (prev >= 0) {
if (squares[prev] != squares[start]) {
return Solvable(prev, squares);
}
}
if (forward < squares.size()) {
if (squares[forward] == 0) return true;
if (squares[forward] != squares[start]) {
return Solvable(forward, squares);
}
}
return false;
}
代码似乎不工作,因为我认为我错过了一个基本情况,但我似乎无法找出我需要的其他基本情况。
谢谢!
有几个问题。首先,您的代码只能选择前进或后退,而不能两者都选择。原因是你总是说return Solvable
。你需要的是这样的东西
// try backwards
bool found = Solvable(prev, squares);
// did it work?
if (found)
return true;
// oh well try forwards
return Solvable(forward, squares);
这里没有对基本情况的检查也没有对越界的检查但希望你们能明白。
第二个问题是你的squares[forward] != squares[start]
和squares[prev] != squares[start]
测试。在我看来,它们并不像你描述的那样是问题的一部分。我会把它们扔掉。
说明递归的好问题。
这里有一个版本可以检测循环并跟踪你是否尝试过从特定的正方形向前或向后移动。使用具有非递归前端的递归辅助函数来设置变量(这里是fwd
和bck
向量)以跟踪您正在执行的操作的模式非常常见。
#include <iostream>
#include <vector>
using namespace std;
bool helper(int cur, const vector<int> &squares,
vector<bool> &fwd, vector<bool> &bck)
{
cout << "cur=" << cur << " sq=" << squares[cur] << endl;
if (squares[cur] == 0) return true; // Found.
if (fwd[cur] && bck[cur]) return false; // Cycle.
if (!fwd[cur]) { // Try forwards.
fwd[cur] = true;
int up = cur + squares[cur];
if (up < squares.size()) {
cout << "Forwards" << endl;
bool found = helper(up, squares, fwd, bck);
if (found) return true;
}
}
if (!bck[cur]) { // Try backwards.
bck[cur] = true;
int dn = cur - squares[cur];
if (dn >= 0) {
cout << "Backwards" << endl;
bool found = helper(dn, squares, fwd, bck);
if (found) return true;
}
}
return false;
}
bool solvable(const vector<int> &squares)
{
vector<bool> fwd(squares.size(), false);
vector<bool> bck(squares.size(), false);
return helper(0, squares, fwd, bck);
}
int sqs[] = { 2, 3, 1, 1, 4, 3, 4, 0, 1, 3, 1 };
int main(void)
{
vector<int> sq(sqs, sqs + sizeof(sqs) / sizeof(int));
cout << solvable(sq) << endl;
}
相关文章:
- 需要帮助设置在C++中使用的Potrace
- 在指针的帮助下,文本文件中单词的频率
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如何在Qbutton的帮助下更改Q对话框的宽度
- 需要帮助将结构数组传递给函数
- C++需要帮助从用户那里获得一个整数,并确保它在另外两个整数之间
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 有人可以帮助我处理正则表达式吗?
- C++调用具有 *this 属性的单个帮助程序函数
- C++:需要帮助了解运算符重载错误
- 需要以下代码的帮助,下面的代码有什么问题
- CS1 项目帮助C++
- 用于检查值是否为其任何参数的帮助程序函数
- 需要有关此 if 语句的帮助
- 类型限定宏帮助程序
- CoreCLR 中的检测探查器 - 将帮助程序程序集加载到 dotnet 进程的方法
- NS3 插槽混淆(需要帮助理解)
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 需要帮助查找内存泄漏
- 有人可以帮助我理解这些参数/参数吗?