关于#递归#的问题,如何解决?

四、完善程序
1.李生素数是指两个相差为 2 的素数,例如:3 he5,5 he7,11和13 等。下面程序可以输出五对李生素数,其中函数 g 的功能是: 断整数 a 是否是素数

img


2.下面程序的功能是利用递归的方法生成从 1到 n(n<1)的 n 个数的全部可能的排列( 不一定按升序输出 ) 。例如,输入 3,则应该输出( 每行输出 5个数的排列)

img

第一题
1 true 2 while 3 return false; 4 q(k+2) 5 k++

第二题

#include <iostream>
using namespace std;

int n, a[10];
long count = 0;

void perm(int k) {
    int j, p, t;
    if (k == n) {
        count++;
        for (p = 1; p <= n; p++)
            cout << a[p];
        cout << " ";
        if (count % 5 == 0)
            cout << endl;
        return;
    }
    for (j = k; j <= n; j++) {
        t = a[k];
        a[k] = a[j];
        a[j] = t;
        perm(k + 1);
        t = a[k];
        a[k] = a[j];
        a[j] = t;
    }
}

int main() {
    int i;
    cin >> n;
    for (i = 1; i <= n; i++)
        a[i] = i;
    perm(1);
    return 0;
}