
C での順列生成のコードを十進BASICで書いたのですが、再帰関数を呼び出すところでエラーが出ます。
チュートリアルを見ると、十進BASICは再帰をサポートしています。どこがまずいのでしょうか?
DECLARE EXTERNAL FUNCTION Perm
LET N = 5
DIM p(1 TO N)
FOR i = 1 TO N
LET p(i) = i
NEXT i
Perm(1) !ここに書けないというエラーが出る。
END
EXTERNAL FUNCTION Perm(n)
IF i = n THEN
FOR j = i TO n
dmy = p(i)
p(i) = p(j)
p(j) = dmy
NEXT i
Perm(i+1); // 再帰呼び出し
FOR j = i TO n
dmy = p(i)
p(i) = p(j)
p(j) = dmy
NEXT i
ELSE
FOR j = 1 TO N
PRINT USING "#": p(j);
NEXT j
PRINT
END IF
END FUNCTION
-----------------------------------------------------------------
//順列生成(辞書式順列ではない)gcc -o kperm kperm.c
#include <stdio.h>
#define N 5
int p[N+1];
void perm(int);
void main(void)
{
for (int i = 1;i <= N;i++)
p[i] = i;
perm(1);
}
void perm(int i)
{
int j,dmy;
//for debug printf("p[i]=p[%d]=%d\n",i, p[i]);
if (i < N)
{
for (j = i;j <= N; j++) //A-Loop
{
dmy = p[i]; p[i] = p[j]; p[j] = dmy;
perm(i+1); // 再帰呼び出し
dmy = p[i]; p[i] = p[j]; p[j] = dmy;
}
}
else //(i == N)
{
for (j = 1;j <= N;j++) //B-Loop
printf("%d",p[j]);
printf("\n");
}
}
No.2ベストアンサー
- 回答日時:
ちょっと試してみましたが、
Tacosanさん曰く>「関数」だから式の中で呼び出さないといけない
これが原因のような。subにすべきかと。
※ほかのミスについては割愛。
丁寧な回答まことにありがとうございました。何とか動くようになりました。
> ※ほかのミスについては割愛。
読み返したら実にいろいろひどいコードでしたwwww
sub は大昔のBASIC の gosub retuan の名残なのかもしれませんが、関数との違いがよくわかりません。十進BASICではせいぜい50行程度のプログラムしか作らないものですから、関数内やsubプログラム内でグローバル変数が使えない(と思う)のはちょっと痛い。
DECLARE EXTERNAL SUB Perm
LET N = 3
DIM p(N)
FOR i = 1 TO N
LET p(i) = i
NEXT i
CALL Perm(N,1,p)
END
EXTERNAL SUB Perm(N,i,p())
IF i < N THEN
FOR j = i TO N
LET dmy = p(i)
LET p(i) = p(j)
LET p(j) = dmy
CALL Perm(N,i+1,p) ! 再帰呼び出し
LET dmy = p(i)
LET p(i) = p(j)
LET p(j) = dmy
NEXT j
ELSE
FOR j = 1 TO N
PRINT USING "#": p(j);
NEXT j
PRINT
END IF
END sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【初月無料キャンペーン実施中】オンライン健康相談gooドクター
24時間365日いつでも医師に健康相談できる!詳しくはコチラ>>
-
[C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について
C言語・C++・C#
-
C言語について。
C言語・C++・C#
-
C言語の質問です、プログラミング初心者です このような文字列があった場合 abcdef☆ghijk"
C言語・C++・C#
-
4
C言語について教えて欲しいです。 ファイルの中身をコピーするプログラムを作ってます aというファイル
C言語・C++・C#
-
5
C言語 少しの疑問
C言語・C++・C#
-
6
c言語について array[i]-‘0’ これってどーゆー意味ですか? (ちなみに16進数を10進数
C言語・C++・C#
-
7
参考にいろいろとc言語、c++言語プログラミングでレジストリーを操作したいのですが、無料配布のc++
C言語・C++・C#
-
8
C言語について
C言語・C++・C#
-
9
C++アンインストールの影響
C言語・C++・C#
-
10
forループは何故、forなのですか?
その他(プログラミング・Web制作)
-
11
PCの性能とビルド時間
C言語・C++・C#
-
12
E3 82 8A E3 83 89 E3 83 b3 E3 82 これはなんですか?
その他(プログラミング・Web制作)
-
13
C言語で移動平均のプログラムを作りたいのですが、数値をファイルから取ってきて計算をするプログラムはど
C言語・C++・C#
-
14
C++はWindows運用に必須なのか
C言語・C++・C#
-
15
プログラム例え話について。
C言語・C++・C#
-
16
コールとリンク違いについて。
C言語・C++・C#
-
17
C言語について質問です。 以下のような結果を出すためにはどのようなコードが良いですか?サンプルコード
C言語・C++・C#
-
18
c言語で自然数nを入力、2以上n以下の偶数の累積sumを求めるプログラムをfor文を使って作りたいで
C言語・C++・C#
-
19
順列をランダムに発生するプログラム
Visual Basic(VBA)
-
20
プログラミング 処理速度
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
ポストの対応問題
-
5
実数の整数部,小数部の取得
-
6
C言語 エラーの原因がわからな...
-
7
C++でvectorにテキストファイル...
-
8
ColorをRGBで指定する方法
-
9
C言語での奇数の和
-
10
ファイルから読みこむ方法
-
11
PowerShellがうまくいかない
-
12
課題でつまってます・・・
-
13
C言語での引数の省略方法
-
14
未解決の外部シンボル _printf...
-
15
比較回数と交換回数表示について
-
16
構造体の勉強中です 合計点の高...
-
17
Arduinoのプログラムにエラーが...
-
18
任意の文字列のアルファベット...
-
19
アスタリスクで正方形
-
20
入力された数字を大きい順に並...
おすすめ情報
公式facebook
公式twitter