所以我有递归函数,因为它需要花费很长时间才能运行,因此需要对其进行记忆。我们了解到您将其存储在缓存中,但是需要帮助。我还注意到的一件事是,当我在函数调用后打印该值时,我将获得正确的值,但是当我删除它时,答案将是错误的。任何帮助表示赞赏。该函数应该计算在滚动 s 侧模后滚动 t 次
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
#include <vector>
using namespace std;
double dond(int s, int t, int l);
int main(int argc, char *argv[]) {
int s, t, l;
s = atoi(argv[1]);
t = atoi(argv[2]);
l = atoi(argv[3]);
//printf("%d %d %d\n", s, t, l);
cout << dond(s, t, l) << endl;
}
double dond(int s, int t, int l) {
int i, j;
double a, d = 0, yuh = 1.0/s;
vector <double> cache;
if(t == 1 && l == -1) return 1;
if(t == 1) {
if(l == 0 || l == s-1) return (s-2)/(double)s;
else return (s-3)/(double)s;
}
for(i = 0; i < s; i++) {
if(l == -1 || (i != l && i != l-1 && i != l+1)) {
cache.push_back(dond(s, t-1, i)); //store into cache
// printf("A: %f\n", a);
//printf("",a );
}
}
for(i = 0; i < cache.size(); i++) a += cache[i];
return yuh * a;
}