这是我的代码(不要介意法语部分,关键是代码本身):
#include <iostream>
#include <vector>
using namespace std;
double SommeRecursive(vector <double> tableau) {
int i = tableau.size();
if (i > 1) {
vector <double> clone = tableau;
int dernier = clone[i-1];
clone.pop_back();
return dernier + SommeRecursive(clone);
}
}
int main(int argc, char** argv) {
vector <double> tableau;
double nombre;
cout << "Nombre 1 : ";
cin >> nombre;
tableau.push_back(nombre);
cout << "Nombre 2 : ";
cin >> nombre;
tableau.push_back(nombre);
cout << "Nombre 3 : ";
cin >> nombre;
tableau.push_back(nombre);
cout << "Résultat : " << SommeRecursive(tableau) << endl;
return 0;
}
我在使用
后测试了我的代码gcc -std=c++14 -o main main.cpp && ./main
如果我输入的数字如3.33,3.33和3.33,我得到的结果是9.33而不是9.99。知道为什么吗?
答案 0 :(得分:4)
这一行是你的问题:
graphRec = {links: graph.links.slice(), nodes: graph.nodes.slice()}
您正在转换为int。因此,当您的递归函数计算时,它将执行此操作:
int dernier = clone[i-1];
我还怀疑你的递归函数应该是:
(int) 3.33 + (int) 3.33 + 3.33 = 3 + 3 + 3.33 = 9.33
答案 1 :(得分:2)
您的程序遇到了几个问题:
您正在截断if (i > 1) {
...
double dernier = clone[i-1];
...
} else {
return tableau[0]; // This is your base condition.
}
double
行:
int
当输入为空向量时,函数int dernier = clone[i-1];
没有SommeRecursive
语句。因此,您的程序表现出不确定的行为。
将其更改为:
return
进一步细化避免创建输入向量副本的函数:
double SommeRecursive(vector <double> tableau) {
int i = tableau.size();
if (i > 0) {
vector <double> clone = tableau;
double back = clone.back();
clone.pop_back();
return back + SommeRecursive(clone);
}
return 0.0;
}
答案 2 :(得分:1)
在你的sommeRecursive方法中,你得到一个int变量的i-1th值而不是double,所以它向下舍入(即3 + 3 + 3.33)