lengthの配列が与えられた場合、必要なのは、その特定の配列の長さのサブシーケンスの数を計算n
するプログラムを作成することです。m
以下はそれを行うコードです。どうぞ、ご覧ください。
int recCountSubseq(int seqLength, int length, int s[]) {
int answer;
if (seqLength == 0) { /* Base case: found a subseq of correct length */
return 1;
}
if (seqLength >= length) { /* Base case: only possible is seqLength == length*/
return (seqLength==length);
}
/* Recursive case: two branches */
answer = recCountSubseq(seqLength-1, length-1, s); /* s[length-1] is in subseq*/
printf("answer=%d\n", answer);
answer += recCountSubseq(seqLength, length-1, s); /* s[length-1] is not in subseq */
printf("increased answer is %d\n", answer);
return answer;
}
void countSubseq(int seqLength, int length, int s[]) {
printf("#subseq = %d\n", recCountSubseq(seqLength, length, s));
}
int main() {
int length;
scanf("%d", &length);
int seqLength;
int i;
int s[100];
for (i=0;i<length; i++) {
scanf("%d", &s[i]);
}
countSubseq(seqLength, length, s);
return 0;
}
さて、私の質問:値がseqLength
毎回減少するのはなぜですか? また、このコードはどのように機能していますか?