C言語・リカーシブコールを使っての関数を作りたいですが・・・
初めて質問させていただきます。
私は今、C言語の勉強中で、
リカーシブコール(再帰び出し)を勉強中です。
以下に書かせていただいた問題を解いているのですが
うまくいきません。
このpower関数の定義部分を再帰呼び出しを使って書き直したいです。
大変申し訳ないのですが、初心者のためここがわからない、という
的確なことが言えません・・・
自分で作ってみたソースでコンパイルしてみたところ、
最後の%d乗のところがうまく出せません。
うまくコンパイルできるソースがお分かりの方いらっしゃいましたら
ぜひ教えていただきたいです。
恐れ入りますが、よろしくお願い致します。
問題:
xのy乗を返す関数int power(int x,int y)を作成し、
次のようにキーボードから入力して計算を行うコードを入力してください。
***************************************************
1番目の整数を入力してください。(1~5)
2←(キーボードから入力)
2番目の整数を入力してください。(1~5)
3←(キーボードから入力)
2の3乗は8です。
***************************************************
(再帰呼び出しをせずに作ったソースです↓)
#include <stdio.h>
/*power関数の宣言*/
int power(int x, int y);
int main(void)
{
int num1,num2,ans;
printf("1番目の整数を入力してください。\n");
scanf("%d", &num1);
printf("2番目の整数を入力してください。\n");
scanf("%d", &num2);
ans = power(num1,num2);
printf("%dの%dは%dです。\n", num1,num2,ans);
return(0);
}
/*power関数の定義*/
int power(int x, int y)
{
int a;
int i;
a = x;
for(i=1;i<y;i++){
a = a * x;
}
return a;
}
よろしくお願い致します。
C言語初心者です。
Re:C言語初心者です。
>自分で作ってみたソースでコンパイルしてみたところ、
>最後の%d乗のところがうまく出せません。
まずは、自分で書いてみたコードを提示してみてください。
そうすれば、nakaさんの再帰呼び出しに対する理解の誤りが分かるかも知れません。
>最後の%d乗のところがうまく出せません。
まずは、自分で書いてみたコードを提示してみてください。
そうすれば、nakaさんの再帰呼び出しに対する理解の誤りが分かるかも知れません。
Re:C言語初心者です。
提示されたソースは再帰呼び出しになっていません。
取り敢えず、power関数を「日本語で」定義して見てください。
以下のような形式で。
「関数power(x,y)は〇〇という計算を行う関数である。」
この〇〇というところに関数powerが入っていれば、再帰的定義となります。
nakaさんが提示されたコードでは
「関数power(x,y)はxをy回掛けるという計算を行う関数である。」
になっています。再帰的定義ではありません。
#何らかの授業でやっているのなら、例題も出ているはずです。
#それも同様に再帰的定義をやってみてください。
取り敢えず、power関数を「日本語で」定義して見てください。
以下のような形式で。
「関数power(x,y)は〇〇という計算を行う関数である。」
この〇〇というところに関数powerが入っていれば、再帰的定義となります。
nakaさんが提示されたコードでは
「関数power(x,y)はxをy回掛けるという計算を行う関数である。」
になっています。再帰的定義ではありません。
#何らかの授業でやっているのなら、例題も出ているはずです。
#それも同様に再帰的定義をやってみてください。
Re:C言語初心者です。
> 私が考えていたものはこちらです。
>
> int power(int x,int y)
> {
> int a;
> a = x;
>
> if(y == 1){
> return a;
> }
>
> else{
> power(x,y-1);
> }
>
> 単純にaを返すだけでは全然違うことはわかっているつもりですが
> どう表わしたらいいかがどうしてもわかりませんでした。
惜しい。
power(3,1)って3ですよね?
power(3,2)って3*3ですよね?
power(3,3)って3*3*3ですよね?
power(3,4)って3*3*3*3ですよね?
では、power(3,n)はどうなりますか?
>
> int power(int x,int y)
> {
> int a;
> a = x;
>
> if(y == 1){
> return a;
> }
>
> else{
> power(x,y-1);
> }
>
> 単純にaを返すだけでは全然違うことはわかっているつもりですが
> どう表わしたらいいかがどうしてもわかりませんでした。
惜しい。
power(3,1)って3ですよね?
power(3,2)って3*3ですよね?
power(3,3)って3*3*3ですよね?
power(3,4)って3*3*3*3ですよね?
では、power(3,n)はどうなりますか?
Re:C言語初心者です。
もっと直接的な考えで言うと、
power(x,y) = k * power(x,y-1)
という式で、kの値が何になるかを考えてみると、
この式がそのまま再帰で使えることが分かるはずです。
power(x,y) = k * power(x,y-1)
という式で、kの値が何になるかを考えてみると、
この式がそのまま再帰で使えることが分かるはずです。
Re:C言語初心者です。
ありがとうございます。
power(3,n)は・・・
3をn回繰り返してかけていくんですよね・・・
3*3*3*3*3.....
3かけることをn-1回繰り返してます。
せっかく教えていただいたのに申し訳ないです。
power(3,n)は・・・
3をn回繰り返してかけていくんですよね・・・
3*3*3*3*3.....
3かけることをn-1回繰り返してます。
せっかく教えていただいたのに申し訳ないです。
Re:C言語初心者です。
> power(x,y) = k * power(x,y-1)
>
> という式で、kの値が何になるかを考えてみると、
> この式がそのまま再帰で使えることが分かるはずです。
少し考えてみます。
ありがとうございました。
>
> という式で、kの値が何になるかを考えてみると、
> この式がそのまま再帰で使えることが分かるはずです。
少し考えてみます。
ありがとうございました。