簡體   English   中英

將遞歸函數轉換為迭代函數

[英]Convert recursive function to iterative

我有這個遞歸定義的功能:

功能

而且我已經在C ++中實現了它:

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

如何迭代計算相同的函數?

為了好玩,我第一次嘗試。 誰能改善?

#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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM