- 締切済み
階乗
数列{an}=n!となるようなプログラミングを作りたいのですが、そのやり方がいまいち分かりません。 int a, n, i, k; k=1; a=k*i; ・・・・(1) for(i= 1; i<= n; i++); とすると a=i になっていしまい階乗にならないんですよ。(1)がおかしいのは分かるのですがどうしたらいいのかが分かりません。 ようはan=n*a(n-1) の形にして繰り返したいんですがどうしたらいいですか? C言語の根本的なやり方が分かってなくてすいません!!
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- secret-goo
- ベストアンサー率26% (21/79)
nをキーボードから入力するのであれば、 int n,i,a; scanf("%d",&n); a=1; for(i=1;i<=n;i++){ a=a*i;} とすればいいのではないでしょうか?
- muyoshid
- ベストアンサー率72% (230/318)
こんにちわ。 実際に動かしていませんが、a0123456789 さんのおっしゃられているように 再帰呼び出しを使用する方法と、自力で計算させる方法があります。 [再帰呼び出しのプログラム] int fact(int n) { return((0 == n) ? 1 : n*fact(n-1)); } [自力で計算するプログラム] int fact(int n) { int loop, ret; for (loop = 1, ret = 1; loop <= n; loop++, ret *= loop); return(ret); } になると思います。 再帰を使った方がプログラムは分かり易いですが、実行性能は 自力でやった方が早いです。 まぁ、状況によって使い分けて下さい。
- a0123456789
- ベストアンサー率22% (57/255)
int a(int n) { return((n==1)?1:n*a(n-1)); } のような関数を定義しては?