代码块C++例外

CodeBlocks C++ Exception

本文关键字:例外 C++ 代码      更新时间:2023-10-16

我的代码有问题:

#include<iostream>
#include<vector>
#include<algorithm>
#include<math.h>
using namespace std;
long long addV(int i) {
    return pow(10,i);
}
int len;
void recurse(int n,long long &ways,int values[],int current=0,int p=0) {
    if(p>len) return;
    if(current>n) return;
    if(current ==n) {
        ways++;
        return;
    }
    int cv = n-current;
    cv/=values[p];
    for(int i=0;i<=cv;i++) {
    recurse(n,ways,values,current+values[p]*i,p+1);
    }
}

int main() {
    int n;
    cin>>n;
    long long ways=0;
    int values[] ={1,2,3};
    len = sizeof(values)/sizeof(int);
    recurse(n,ways,values);
    cout<<ways;
}

异常来自 (cv/=values[p];)线。当然,糟糕的代码块永远不会显示异常是什么。我敢肯定它很容易解决。

if(p>len)return;

事实上,您已经在p == len时越过边界访问了.您需要返回一次p >= len.

因为递归的结束条件是p > len这意味着p将在零到三(含)的范围内。如您所知,一个由三个条目组成的数组的索引范围从零到二。