再帰関数 (Recursive function)
関数が自分自身を内部で呼び出す関数を 再帰関数 と呼ぶ。
基本的に受け取った引数を少しずつ変えながら次の自分を呼び出す。
数学の漸化式だと思ってください。
例えば以下の漸化式は、
以下のプログラムで表せる。
function a(n) {
if (n === 0) {
return 0
} else {
return 2 + a(n - 1)
}
}
演習
問題1
- 問題
- 解答
自然数 n を受け取り n の階乗(n!)を返す関数「factorial」を再帰関数で実装してください。
function factorial(x) {
if (x === 1) {
return 1
} else {
return x * factorial(x - 1)
}
}
問題2
- 問題
- 解答
自然数 n(0を含む) を受け取り、n番目のフィボナッチ数を返す関数「fibonacci」を再帰関数で実装してください。
フィボナッチ数は、以下の漸化式で求められます。
function fibonacci(x) {
if (x === 0) {
return 0
}
if (x === 1) {
return 1
}
return fibonacci(x - 1) + fibonacci(x - 2)
}
問題3
- 問題
- 解答
自然数a, bを受け取り、ユークリッドの互除法を用いて a と b の最大公約数を返す関数「euclideanAlgorithm」を実装してください。
ユークリッドの互除法とは、
a と b の最大公約数は、a を bで割った余りをrとして b と r の最大公約数に一致するというものです。
function euclideanAlgorithm(a, b) {
if (a % b === 0) {
return b;
} else {
return euclideanAlgorithm(b, a % b);
}
}