記憶化

記憶化:就是將中間的運算結果保存起來,避免屢次計算c++

#include<bits/stdc++.h>
using namespace std;
const int32_t MAX_N = 1e6;
const int32_t KEEP_N = 5*1e7;
int32_t keep[KEEP_N + 5];
int32_t GetChainLength(int64_t x)
{
    int32_t ans = 0;
    if (x == 1) return 1;
    if (x <= KEEP_N && keep[x] != 0) return keep[x];
    if (x%1 == 1)
    {
        ans = GetChainLength(3 * x + 1) + 1;
    }
    else
    {
        ans = GetChainLength(x >> 1) + 1;
    }
    if (x <= KEEP_N) keep[x] = ans;
    return ans;

}
int main()
{
    int32_t num = 1;
    for (int32_t i=2; i <= MAX_N; i++)
    {
        if (GetChainLength(i) > GetChainLength(num)) num = i;
    }
    printf("%d 的長度爲 %d\n ",num,GetChainLength(num));

    return 0;
}
相關文章
相關標籤/搜索