ユークリッド距離を再帰呼び出しで計算する。前回と同様に2つのベクトル\(A,B\)の距離は
\begin{align}
d=\sqrt{(a_1 – b_1)^2+(a_2 – b_2)^2 + \cdots +(a_{n-1} – b_{n-1})^2+(a_n – b_n)^2}
\end{align}
で与えられる。
以下Cを言語の例。
#include<stdio.h>
#include<math.h>
double norm(double*, double*, int, int);
void prod(double*, double*, int, double*);
int main(int argc, char* argv[]) {
double p1[] = {0,0};
double p2[] = {1,1};
double d;
int arrayNumber1 = sizeof p1 / sizeof p1[0];
int arrayNumber2 = sizeof p2 / sizeof p2[0];
d = norm(p1, p2, arrayNumber1, arrayNumber2);
printf("norm -> %f", d);
return 0;
}
double norm(double* p1, double* p2, int arrayNumber1, int arrayNumber2) {
if (arrayNumber1 == arrayNumber2) {
double num = 0;
int n = arrayNumber1 - 1;
prod(p1, p2, n, &num);
printf("%f", num);
return sqrt(num);
}
else {
return -1;
}
}
void prod(double* p1, double* p2, int n,double* num) {
if (n == 0) {
*num = *num + pow(p1[0] - p2[0],2.0);
}else {
prod(p1, p2, n - 1, num);
*num = *num + pow(p1[n] - p2[n], 2.0);
}
}
コメント