将递归函数转换为迭代函数

时间:2017-03-29 08:39:44

标签: c++ recursion

我有这个递归定义函数:

Function

我已经用C ++实现了它:

int f_recursive(int n) {
if (n <= 2) {
    return 1;
}
else {
    return ( n * f_recursive(n - 1) - f_recursive(n - 2) );
}

如何迭代计算相同的函数?

1 个答案:

答案 0 :(得分:0)

为了好玩,我的第一次尝试。任何人都可以改进吗?

#include <iostream>
#include <iomanip>

int f_recursive(int n)
{
    if (n <= 2) {
        return 1;
    }
    else {
        return (n * f_recursive(n - 1) - f_recursive(n - 2));
    }
}

int f_iterative(int n)
{
    int result = 1, result_1 = 1;

    for (int i = 3 ; i <= n ; ++i) {
        int result_2 = result_1;
        result_1 = result;
        result = i * result_1 - result_2;
    }
    return result;
}

int main()
{
    for(int i = 0 ; i < 14 ; ++i) {
        std::cout << std::setw(10) << f_recursive(i) << " " << f_iterative(i) << std::endl;
    }
}

示例输出:

         1 1
         1 1
         1 1
         2 2
         7 7
        33 33
       191 191
      1304 1304
     10241 10241
     90865 90865
    898409 898409
   9791634 9791634
 116601199 116601199
1506023953 1506023953