大学のCのプログラミングの課題でて、一応できたのですが、なぜこういうコード(アルゴリズム)なのかがわかりません。
問題は、文字’L’がl個、’R’がr個で構成される文字列をすべて表示する関数を作成する。こ こで、l と r は非負整数でキーボードから入力し、l + r ≤ 8 としてよい (高々8 文字が入 る配列 str[9] を 1 つ用意すると良い)。キーボードから非負整数 l, r(ただし l + r ≤ 8) を入力すると上記の関数を呼び出し、文字列を表示するプログラムを作成せよ。(参考: ’L’ を選べれば選んで、残り l − 1 個と r 個の文字列作成。同様に’R’ を選べれば選ん で · · ·。と両方行えばすべて行ったことになる。) です。
コードのわからない部分は、関数func()の引数にi,l,r,strがありますが、関数を使う時に、引数として、0を渡しているところです。なぜ、0なのでしょうか?また、関数func()ないのif文での処理でなぜ、問題文のようなコードがかけるのでしょうか?わかる方いらっしゃましたら、よろしくお願いします!
C
1#include <stdio.h> 2 3void func(int i, int l, int r, char *str); 4 5int main(void){ 6 int l,r; 7 char buf[8+1]; 8 printf("Input two non-neg. intergers ,l and r:"); 9 scanf("%d%d",&l,&r); 10 // printf("l:%d",l); 11 // printf("r:%d",r); 12 func(0,l,r,buf); 13} 14 15void func(int i, int l, int r, char *str){ 16 if(l + r == 0){ 17 str[i] = '\0'; 18 printf("%s\n", str); 19 } 20 if(l > 0){ 21 str[i] = 'L'; 22 func(i + 1, l - 1, r, str); 23 } 24 if(r > 0){ 25 str[i] = 'R'; 26 func(i + 1, l, r - 1, str); 27 } 28 }
回答2件
あなたの回答
tips
プレビュー