• 締切済み

階乗

数列{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言語の根本的なやり方が分かってなくてすいません!!

みんなの回答

回答No.3

nをキーボードから入力するのであれば、 int n,i,a; scanf("%d",&n); a=1; for(i=1;i<=n;i++){ a=a*i;} とすればいいのではないでしょうか?

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.2

こんにちわ。 実際に動かしていませんが、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); } になると思います。 再帰を使った方がプログラムは分かり易いですが、実行性能は 自力でやった方が早いです。 まぁ、状況によって使い分けて下さい。

回答No.1

int a(int n) { return((n==1)?1:n*a(n-1)); } のような関数を定義しては?