前提・実現したいこと
ここに質問の内容を詳しく書いてください。
再帰関数を用いて配列aのb番目以降e番目以前の範囲で、すべての要素が異なることを表す真偽値を返すプログラムを作成するため、(1),(2),(3)に当てはまる式を知りたいです。
以下にソースコードを記載します。
ソースコード
#include <stdio.h>
int find(int a[], int b, int e, int v) {
if ( b > e ) {
return -1;
}
if ( a[b] == v ) {
return b;
}else{
return find(a, b+1, e, v);
}
}
int distinct(int a[], int b, int e){
if( b > e ){
return 1;
}
else{
return find(a, b+1, e, (1)) == (2) && // (1), (2)
distinct(a, (3), e); // (3)
}
}
int main(void) {
int a1[5] = {3,1,6,5,9}; // すべての要素が異なる
int a2[5] = {3,1,6,5,1}; // a[1]とa[4]が等しい
printf("%d\n", distinct(a1, 0, 4)); // 真(0以外) printf("%d\n", distinct(a1, 1, 3)); // 真(0以外) printf("%d\n", distinct(a2, 0, 4)); // 偽(0) printf("%d\n", distinct(a2, 1, 4)); // 偽(0) printf("%d\n", distinct(a2, 1, 3)); // 真(0以外) return 0;
}