• ベストアンサー

階乗をもとめるプログラムで、、

このように書くと、エラーがでます。 #include<stdio.h> main(){ int number; int kekka; scanf("%d",&number); kekka=KAIJO(number); printf("%d",kekka); } KAIJO(int n;){ int a; a = n * KAIJO(n-1); return(a); } エラー内容は上から数えて8行目に関数kaijoは宣言されていないのでint型 とみなす 上から数えて13行目と14行目あたりに構文上の誤りがある、 といわれます。 Windowsは「C言語を始めよう!」をつかいました。 Linuxでもやったのですが、 これもエラーがでます。どこにエラーがでるのかはわすれました。 再帰関数って何型って宣言しなきゃならないのでしょうか? あとどこがいけないのでしょうか? お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • wolv
  • ベストアンサー率37% (376/1001)
回答No.1

「エラー内容は上から数えて8行目に関数kaijoは宣言されていないのでint型 とみなす 」 解決策1. mainよりもKAIJOを先にかく. 解決策2. mainの前に int KAIJO(int); という行を入れる. 基本ですので,勉強してください. まあ,初心者のころは気づきにくいところではあります. ------------------------------------------------------------ 「上から数えて13行目と14行目あたりに構文上の誤りがある、 」 「KAIJO(int n;)」がいけません. 「KAIJO(int n)」か, 「KAIJO(n)int n;」にしましょう. これは自力で見つけられるようになりましょう. ------------------------------------------------------------ なお, このプログラムでは,ここまでなおしても無限ループに入ってしまって階乗の値は計算されません. ヒント: 2の階乗は2かける1の階乗ですが, 1の階乗は1×0の階乗? 0の階乗は0×(-1)の階乗?

amuro_78
質問者

お礼

ありがとうございます。 ループの終端がぬけていたんですね、

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

補足アドバイスです。 関数KAIJO()の宣言場所の問題については、 「プロトタイプ宣言」というキーワードを調べてみると 良いかと思います。 また、再帰処理を行うためには、再帰呼び出しが止まる所が 必要となります。 #私は「再帰の底」と呼んでいますが。 今回の場合は 1! = 0 か、0! = 1 のどちらかを使えばよいです。

amuro_78
質問者

お礼

ありがとうございます。

すると、全ての回答が全文表示されます。