ページ 11

関数の再帰呼び出しについて

Posted: 2010年8月10日(火) 00:17
by
質問させていただきます。

正の整数a,nを入力し
aのn乗を計算し表示するプログラムを作ろうとしています。
条件は数学関数powを使わないことと関数の再帰呼び出しを使うことです。

x=a*x(a,n-1);の部分で代入文が変ですという旨のエラー(?)が出てしまうのですが
何をいれていいかわかりません、またそこが正しくなれば
正常に動くのかもわかりません…
どうすれば正常に実行できるのか教えていただけたら嬉しいです。





#include<stdio.h>


int x(int a, int n){
if(0==n){
return a*x(a,n-1);
}
else{
return 1;
}
}


main(){
int a,n,fact;
int x(int a, int n);

x=a*x(a,n-1);

printf("a?");
scanf("%d",&a);
printf("n?");
scanf("%d",&n);


printf("%d^%d = %d\n",a,n,x);


}

Re:関数の再帰呼び出しについて

Posted: 2010年8月10日(火) 00:25
by Poco
xは変数ですか?関数ですか?
関数に値を代入できません。
別変数を使ってください。

Re:関数の再帰呼び出しについて

Posted: 2010年8月10日(火) 00:59
by パコネコ
ついでに場所もできれば入力した後のほうが、いいと思うのですが・・・

Re:関数の再帰呼び出しについて

Posted: 2010年8月10日(火) 01:37
by すいそ
訂正してみました。たぶんこれでうまくいくと思います。


#include<stdio.h>

int x(int a, int n){
if(0!=n){ // ==を!=に変えました。 n=0の時、x(m,0)=1 (mは任意)。
return a*x(a,n-1);
}
else{
return 1;
}
}

int main(){
int a,n,fact;
int x(int a, int n);

//x=a*x(a,n-1); 不要です。

printf("a?");
scanf("%d",&a);
printf("n?");
scanf("%d",&n);

fact=x(a,n); //ここでaのn乗を計算します。

printf("%d^%d = %d\n",a,n,fact); // xをfactに変えました。

}

Re:関数の再帰呼び出しについて

Posted: 2010年8月10日(火) 07:46
by naohiro19
出力結果:
a?2
n?2
2^2 = 4

問題なく動いています。

Re:関数の再帰呼び出しについて

Posted: 2010年8月10日(火) 21:19
by 初級者
べき乗を求めた結果を、
fact という階乗(factorial)を連想させそうな
変数に格納するのはイマイチ。

名が体を表わしていない。

Re:関数の再帰呼び出しについて

Posted: 2010年8月11日(水) 03:29
by
無事にプログラムを動かすことができました!
みなさんアドバイスやご指摘本当にありがとうございました!