c++14 - 动态编程问题中的错误。“运行时错误:退出代码为 -1073741571”是什么意思?
问题描述
我需要帮助来调试我的代码以解决问题 - https://codeforces.com/contest/520/problem/B
我尝试使用动态编程解决它,但出现错误。我想知道为什么会出现运行时错误?
我使用的想法是:
- 如果 n 等于 mi,则不需要再按任何按钮;
- 如果 n 大于 m,那么我得到 m 的唯一方法就是每次减去 1。因此 (nm) 移动。
- 并且对于 n < m,我递归地调用了可能的两个移动的 min+1
我得到的错误是 - 运行时错误:退出代码是 -1073741571
我已经实现的代码。
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
ll dfs(ll n, ll m){
if(n == 0) return INT_MAX;
if(n == m){
return 0;
}
if(n > m) {
return abs(n-m);
}
return 1+min(dfs(2*n,m),dfs(n-1,m));
}
int main(){
ll n, m;
cin >> n >> m;
ll ans = dfs(n ,m);
cout << ans << endl;
return 0;
}
解决方案
将退出代码转换-1073741571
为十六进制(例如使用http://www.free-test-online.com/binary/signed_converter.html:选择“签名”,输入数字,按“Dec2Hex”),您将获得相应的 Windows错误代码,即C00000FD
.
0xC00000FD
STATUS_STACK_OVERFLOW
A new guard page for the stack cannot be created.
很可能,堆栈溢出是由于递归太深导致的:每个递归函数调用都会在堆栈上存储一些数据(寄存器、返回地址等),在大量递归之后,这些数据太多了。这就是为什么,您应该尽可能避免递归。
一个解决方案可能是,尝试使用迭代方法(即一个for
或while
循环)重新制定您的解决方案。
推荐阅读
- python - 在linux ubuntu中的selenium python中以正常模式(无隐身模式)打开chromedriver?
- sql - 将驱动器映射到您的 SQL 脚本 NET USE
- android - Kotlin 多平台配置问题
- javascript - JavaScript:关于传入 `addEventListener` 的回调的混淆
- c++ - 如何让 clangd 完成器与 Unrealengine-4 一起工作
- c++ - 在 wxEntry(argc, argv) 之前来自 wxWIdgets (3.1.4) 的 wxMessageBox() 类;警告使用缺少的 CPU 指令集
- c++ - 使用 const 实现 unordered_map 迭代器的问题
- python - 在 python3 中使用 re.sub() 从字符串中删除除给定字母后面的数字之外的所有数字
- javascript - css 文件更改时的平滑过渡
- amazon-web-services - 是否可以在没有 VPC 连接的情况下将 AWS Lambda 函数连接到 AWS EFS?