C言語,マッカーシーの91関数で101以下の値を91に変換する

スポンサーリンク

鍛錬 835

C言語,マッカーシーの91関数で101以下の値を91に変換する

マッカーシーの91関数を使用して、101以下の値を91に変換し、101より大きな値を10減算するプログラムです。

 
スポンサーリンク

数式

以下は、マッカーシーの91関数についてです。

\begin{eqnarray}
F(x)
=
\begin{cases}
x – 10 & ( x \gt 100 ) \\
F(F(x + 11)) & ( x \leq 100 )
\end{cases}
\end{eqnarray}

プログラム

以下は、マッカーシーの91関数を使用して、101以下の値を91に変換し、101より大きな値を10減算するプログラム、test_mccarthy.c です。

今回は、97 ~ 105 の数値を変換しています。

// include
#include <stdio.h>

// prototype
int McCarthy91(int n);

// main
int main(void)
{
	int num;
	int result;
	
	for (num = 97; num <= 105; num++) {
		result = McCarthy91(num);
		printf("%3d --> %3d\n", num, result);
	}
	
	return 0;
}

// ==================================================
// @brief  マッカーシーの91関数
// @brief    n <= 101 の場合は 99 を返し,
// @brief    n > 101 の場合は n - 10 を返す.
// @param  n [in],対象となる数値
// @return (n - 10) -> 引き数nが n > 100 であった場合
// @return McCarthy91(McCarthy91(n + 11))
// @return   -> 引き数nが n <= 100 であった場合
// @note   無し
// ==================================================
int McCarthy91(int n)
{
	if (n > 100) {
		return n - 10;
	}
	
	return McCarthy91(McCarthy91(n + 11));
}

実行結果

以下は、プログラム test_mccarthy.c を実行しています。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra test_mccarthy.c -o test_maccarthy
***@ubuntu:~/***/test/c$ ./test_maccarthy
 97 -->  91
 98 -->  91
 99 -->  91
100 -->  91
101 -->  91
102 -->  92
103 -->  93
104 -->  94
105 -->  95

 
上記に示した通り、101以下の数値を91に変換することができました。

スポンサーリンク

シェアする

フォローする