for文を再帰関数で表現したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ケフィア

for文を再帰関数で表現したい

#1

投稿記事 by ケフィア » 14年前

いま、配列を作る作業をしているのですが、for文を使うと、forをいくつ書けば良いのか分からない状態です。

作ろうとしている配列が、A[X][Y]で、Xの要素数は固定で良いのですが、Yの要素数が実験のたびに変動するためです。そして、処理したいのが、この配列の各列の値を適当な値(このfor文の前に値が決まっています)を代入することです。

例えば、for文だと、Y=3のときには
for(i=0;i<○;i++){
for(j=0;j<○;j++){
for(k=0;k<○;k++){
A[line][0] = C;//(Cという配列のi成分)
A[line][1] = B[j];
A[line][2] = E[k];
}
}
}
のように書くような内容なのですが、Yが増えると、for文も増やさないといけません。
ここで、再帰処理のような方法をつかってうまく書きたいのですが、どう書いたら良いのか分かりません。
一般的なfor文の書き換え方みたいなことでも良いので、教えて頂けませんか?宜しくお願いします。



画像

asm

Re:for文を再帰関数で表現したい

#2

投稿記事 by asm » 14年前

ポインタを使えば、
X[a][c][d]・・・・
のような場合になっても、


int X[a][c][d];
int *p;//配列のポインタ
p=&X[0][0][0][0];//配列の一番最初に設定

for(int i=0;i<a*b*c*d;i++)//配列の要素ぶんループ
{
*p = i;//配列にiを代入
p++;//参照場所を一つ進める
}


このように非常に見やすく管理できます

ポインタで配列の中身を表示する時はちょっと厄介ですが
ポインタのポインタを使えばそれも解決します(たぶん・・・)

たいちう

Re:for文を再帰関数で表現したい

#3

投稿記事 by たいちう » 14年前

> Yが増えると、for文も増やさないといけません。

for文もそうですが、CやBやEに相当するものも増やすのですか?
その辺りの仕様を明確にしてもらわないと、
アドバイスは難しいです。

言葉を変えると、Yが4になった場合、
A[line][3]には何を代入しますか?
Yが5以上になったら?その規則性は?

リクト

Re:for文を再帰関数で表現したい

#4

投稿記事 by リクト » 14年前

これでどうでしょう?
実験の度に最大要素数Xと、for文内に新しい配列を入れればおkです^^


#include <stdio.h>
#define X 2//C,B,Eなどの最大要素数
int main(void)
{
int i;//添字
int line=0;
int C[X]={1,2};
int B[X]={2,3};
int E[X]={3,4};
int A[X][3];
for(i=0;i<X;i++){
A[line][0]=C[line];
A[line][1]=B[line];
A[line][2]=E[line];
printf("%d,%d,%d/n",A[line][0],A[line][1],A[line][2]);
line++;
}
return 0;
}

たいちう

Re:for文を再帰関数で表現したい

#5

投稿記事 by たいちう » 14年前

mintさん == ベイビーさん == ケフィアさん か。

あまり感心出来る行為ではありません。
掲示板の規約を読むことをお勧めします。

http://www.play21.jp/board/formz.cgi?ac ... &rln=65579
http://www.play21.jp/board/formz.cgi?ac ... &rln=65642

ゆーずぃ

Re:for文を再帰関数で表現したい

#6

投稿記事 by ゆーずぃ » 14年前

それが本当であれば、いつもお礼も無しに去っていく人ということですね。ますます感心できません。
困っているということでこちらも心配しているわけですから、せめて解決マークくらいチェックしていってほしいものです。

ケフィア

Re:for文を再帰関数で表現したい

#7

投稿記事 by ケフィア » 14年前

申し訳ございません。軽率でした。
きちんと解決マークチェックします。

for文を増やすと、CやBやEに相当するものも増えていきます。

Yが4になった場合には、 C、B、Eに加えて変数Fが追加され、
Yが5になったら、変数がさらに一つ追加られます、という具合です。

Yが増えていくごとに、変数を代入する順番はかわらず、C、B、E、F・・・のように追加されていきます。

リクト

Re:for文を再帰関数で表現したい

#8

投稿記事 by リクト » 14年前

少しコメント追加します

#include <stdio.h>
#define X 2//C,B,Eなどの最大要素数
int main(void)
{
int i;//添字
int line=0; //line=X
int C[X]={1,2};
int B[X]={2,3};
int E[X]={3,4};
int A[X][3];
for(i=0;i<X;i++){
A[line][0]=C[line];//Y=0の時
A[line][1]=B[line]; //Y=1
A[line][2]=E[line]; //Y=2
printf("%d,%d,%d/n",A[line][0],A[line][1],A[line][2]);
line++;
}
return 0;
}

ゆーずぃ

Re:for文を再帰関数で表現したい

#9

投稿記事 by ゆーずぃ » 14年前

>申し訳ございません。軽率でした。
きちんと解決マークチェックします。

はい。規約を守る方には皆さん優しいので安心してください(^-^)b


今は携帯なのでコードは書けませんが、可変引数の関数にしてみてはどうでしょう?引数としてBCDE…に当たるものを並べていって、引数分だけ内部でforなりでループさせる。

softya

Re:for文を再帰関数で表現したい

#10

投稿記事 by softya » 14年前

質問者が名前を変えるのは規約違反ですよ。

閉鎖

“C言語何でも質問掲示板” へ戻る