我下周会进行中期考试,而且我遇到了一个我无法解决的问题(我发现递归令人困惑!)。我需要将这个递归函数转换为迭代函数,我感谢任何帮助/提示等等!
递归解决方案:
long F(int n) {
if (n >= 0) {
if (n >= 3) {
//std::cout << "Current n is: " << n << std::endl;
long result = 0;
result = 3 * F(n - 1) + 2 * F(n - 2) + F(n - 3);
//std::cout << "Current result is : " << result << std::endl;
return result;
}
else {
return n;
}
}
else {
return -1;
}
}
我尝试迭代解决方案:
long F2(int n) {
if (n >= 0) {
long outterResult = 0;
long innerResult = 0;
for (int o = n; o >= 3; o--) {
outterResult += innerResult;
int iteration = 1;
for (int i = 3; i > 0; i--) {
innerResult += i*(n-iteration);
iteration++;
}
//std::cout << "Current n is: " << n << std::endl;
//std::cout << "Current result: " << outterResult << std::endl;
}
return outterResult;
}
else {
return -1;
}
}
干杯!
答案 0 :(得分:1)
在这种情况下,动态编程方法可以完成这项工作 - 当n == 0时自下而上开始,并将n
的连续值结果存储在数组中。类似的东西(它是伪代码):
for(int i = 0; i <=n ;++i)
if( i < 3)
arr[i]=i;
else
arr[i] = 3 * arr[i-1] + 2 * arr[i-2] + arr[i-3]
return arr[n];