使用递归时的总线错误
Bus Error when using recursion
所以,我正在使用递归并遍历一个名为 code 的数组,该数组包含整数,然后计算一个值
遍历数组。但我不知道这是什么原因导致总线错误:10。
我什至尝试手动遍历数组,一切似乎都很好,数组足够大。
//change to bits/stdc++.h
#include "stdc++.h"
#define MAX 5001
typedef unsigned long long ull;
typedef long long ll;
using namespace std;
int code[MAX];
int co_code;
ull rec(int i, int j, int k){
if(k==j-1)
return 0;
if(i==j-1)
return (rec(k+2, j, k+2));
int temp = code[i]*10 + code[i+1];
if(temp<=26)
return (1 + rec(i+1, j, k));
else
return (rec(i+1, j, k));
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
while(1){
memset(code, 0, sizeof(code[0])*MAX);
string str;
cin>>str;
size_t size = str.length();
co_code = 0;
while(co_code!= size){
code[co_code] = str[co_code] - '0';
co_code++;
}
if(code[0] == 0)
break;
cout<<rec(0, co_code-1, 0) + 1;
}
return 0;
}
访问超出 co_code 给定大小的数组时出错,
因此可以通过更改 if 条件来修复它。
更正:-
if(k>=j-1)
所以,我正在使用递归并遍历一个名为 code 的数组,该数组包含整数,然后计算一个值 遍历数组。但我不知道这是什么原因导致总线错误:10。 我什至尝试手动遍历数组,一切似乎都很好,数组足够大。
//change to bits/stdc++.h
#include "stdc++.h"
#define MAX 5001
typedef unsigned long long ull;
typedef long long ll;
using namespace std;
int code[MAX];
int co_code;
ull rec(int i, int j, int k){
if(k==j-1)
return 0;
if(i==j-1)
return (rec(k+2, j, k+2));
int temp = code[i]*10 + code[i+1];
if(temp<=26)
return (1 + rec(i+1, j, k));
else
return (rec(i+1, j, k));
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
while(1){
memset(code, 0, sizeof(code[0])*MAX);
string str;
cin>>str;
size_t size = str.length();
co_code = 0;
while(co_code!= size){
code[co_code] = str[co_code] - '0';
co_code++;
}
if(code[0] == 0)
break;
cout<<rec(0, co_code-1, 0) + 1;
}
return 0;
}
访问超出 co_code 给定大小的数组时出错, 因此可以通过更改 if 条件来修复它。
更正:-
if(k>=j-1)