c++如何由递归算法转成迭代算法

问题遇到的现象和发生背景

输入任意正整数n(n>=3),要求输出由1,1,2,2,3,3...,n,n等2n个数组成的数列,使得:
两个“n”之间有n个数
如输入3,则输出231213或312132

尝试过的解决方法

#include<iostream>
using namespace std;

struct remark
{
    int frist;//记录第一个下标位置
    int second;//记录第二个下标位置
};
void func(struct remark s[], int size, int k)//tab[i]用于记录i+1的两个下标位置; depth:[0, size)
{
    int i, j;

    if (k == size)//打印结果
    {
        int* res = new int[size * 2];
        for (i = 0; i < size; ++i)
        {
            res[s[i].frist] = res[s[i].second] = i + 1;
        }
        for (i = 0; i < 2 * size; ++i)
        {
            printf("%d", res[i]);
        }
        printf("\n");
        delete[]res;
    }
    else
    {
        for (i = 0; i < 2 * size; ++i)
        {
            //剪枝
            if (i + k + 2 >= 2 * size)//第二个位置不合法
            {
                break;
            }
            for (j = 0; j < k; ++j)//查找depth+1的位置是不是已经被占用
            {
                if ((s[j].frist == i || s[j].second == i) || (s[j].frist == i + k + 2 || s[j].second == i + k + 2))
                {
                    break;
                }
            }
            if (j < k)//位置已经被占用
            {
                continue;
            }
            s[k].frist = i;//第一个depth + 1的位置为i
            s[k].second = i + k + 2;//第二个depth + 1的位置为i + depth + 2
            func(s, size, k + 1);
        }
    }
}

int main()
{
    int size;
    cin >> size;
    struct remark* ss = new struct remark[size];
    func(ss, size, 0);
    delete[]ss;
    system("pause");
    return 0;
}
我想要达到的结果

递归算法转为迭代算法

主要就是while 循环判断

k用For