演習 07
問題 1
999 の約数を大きい方から 5 個だけ標準出力せよ。
問題 2
n
行からなる図形をコンソールに表示する関数 printTriangle(n)
を考える。
i
行目(先頭の行を 1 行目と数える)は、先頭から o
と x
が交互に i
文字繰り返される。
printTriangle(n)
を作成し、以下のプログラムを完成させよ。
void setup() {
noLoop();
}
void draw() {
printTriangle(3);
println();
printTriangle(5);
println();
printTriangle(10);
}
実行結果
o
ox
oxo
o
ox
oxo
oxox
oxoxo
o
ox
oxo
oxox
oxoxo
oxoxox
oxoxoxo
oxoxoxox
oxoxoxoxo
oxoxoxoxox
問題 3
の階乗 を計算する関数 factorial
を再帰を用いずに作成し、以下のプログラムを完成させよ。
void setup() {
noLoop();
}
void draw() {
printFactorial(0);
printFactorial(5);
printFactorial(10);
}
void printFactorial(int n) {
println("factorial(" + n + ") = " + factorial(n));
}
実行結果
factorial(0) = 1
factorial(5) = 120
factorial(10) = 3628800
問題 4
の階乗 は以下のように再帰的に定義できる。
を計算する関数 factorial
を、上記の定義に基づいて再帰を用いて作成し、以下のプログラムを完成させよ。
void setup() {
noLoop();
}
void draw() {
printFactorial(0);
printFactorial(5);
printFactorial(10);
}
void printFactorial(int n) {
println("factorial(" + n + ") = " + factorial(n));
}
実行結果
factorial(0) = 1
factorial(5) = 120
factorial(10) = 3628800
問題 5
自然数 の最大公約数 は以下の手続きで得られる。
gcd(m, n):
nが0より大きい間以下を繰り返す
mをnで割った余りをnに、元のnをmに代入する
mを最大公約数として返す
gcd(m, n)
を、上記の手続きに基づいて再帰を用いずに作成し、以下のプログラムを完成させよ。
void setup() {
noLoop();
}
void draw() {
printGcd(30, 18);
printGcd(17, 13);
printGcd(1071, 1029);
}
void printGcd(int m, int n) {
println("gcd(" + m + ", " + n + ") = " + gcd(m, n));
}
問題 6
自然数 の最大公約数 は以下のように再帰的に定義できる。 は を で割った余りとする。
gcd(m, n)
を、上記の定義に基づいて再帰を用いて作成し、以下のプログラムを完成させよ。
void setup() {
noLoop();
}
void draw() {
printGcd(30, 18);
printGcd(17, 13);
printGcd(1071, 1029);
}
void printGcd(int m, int n) {
println("gcd(" + m + ", " + n + ") = " + gcd(m, n));
}