【问题标题】:Convert recursive function to iterative将递归函数转换为迭代
【发布时间】:2017-03-29 17:29:46
【问题描述】:

我有这个递归定义的函数:

Function

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

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

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

【问题讨论】:

    标签: c++ recursion


    【解决方案1】:

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

    #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
    

    【讨论】:

      猜你喜欢
      • 2020-08-08
      • 2015-05-30
      • 2014-03-01
      • 1970-01-01
      相关资源
      最近更新 更多