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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

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

#1

投稿記事 by » 15年前

質問させていただきます。

正の整数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);


}

Poco

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

#2

投稿記事 by Poco » 15年前

xは変数ですか?関数ですか?
関数に値を代入できません。
別変数を使ってください。

パコネコ

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

#3

投稿記事 by パコネコ » 15年前

ついでに場所もできれば入力した後のほうが、いいと思うのですが・・・

すいそ

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

#4

投稿記事 by すいそ » 15年前

訂正してみました。たぶんこれでうまくいくと思います。


#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に変えました。

}

naohiro19

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

#5

投稿記事 by naohiro19 » 15年前

出力結果:
a?2
n?2
2^2 = 4

問題なく動いています。

初級者

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

#6

投稿記事 by 初級者 » 15年前

べき乗を求めた結果を、
fact という階乗(factorial)を連想させそうな
変数に格納するのはイマイチ。

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

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

#7

投稿記事 by » 15年前

無事にプログラムを動かすことができました!
みなさんアドバイスやご指摘本当にありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る