C言語ど素人で初めてこのフォーラムを利用するので何か良からぬ間違いをしているかもしれません。
規約にも目を通しましたが、それでも何かしでかしているかもしれません。申し訳ないです。
提示された関数を再帰表現へと書き換えるように空欄を埋めろ、という問題が出題されたのですが、
どうにも上手く解答できずに困っております。
元の関数が以下のfunction1です。
動かしていただければわかると思いますが、要するに引数xと引数yをかけた結果を
出力する関数となっています。
int f4(int x, int y){
int r;
for(r=0; y>0; y = y/2){
if(y%2 == 1){
r= r+x;
}
x = x*2;
}
return r;
}int function2(int x, int y){
if(y == 0){
return /*(1)*/;
}
else if(y%2 == 1){
return /*(2)*/;
}else{
return function2( /*(3)*/, /*(4)*/);
}
}(1)x、(2)x + function2(x, y/2)、(3)x*2、(4)y/2
と入れて実行してみるのが正しいと思い動かしてみるのですが、yが偶数の時(?)に思うような値が出力されずに困っています。
例えば、x = 1, y = 2 を代入して実行すると、function1の返り値が2、function2の返り値が4となっています。
正直これ以上どう考えていいかさっぱりわかりません。
アプローチの方法をご教授いただければ幸いです。よろしくお願いいたします。
必要ないと思いますが、環境は以下のようになっています。
OS:Windows7 Home Premium
コンパイラ:明確に何を使用しているかはわかりませんがVisual Studio 2010のデフォルトものを使用しています。
ライブラリはstdio.hのみ使用しているため、おそらくどのような環境でも同じ結果が出力されると思います。
よろしくお願いいたします。