【C言語】再帰呼び出しでユークリッド距離を計算する

ユークリッド距離を再帰呼び出しで計算する。前回と同様に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);

	}
}

コメント

タイトルとURLをコピーしました