第14講 関数の再帰的呼び出し
第5話 コンソール画面から値を取得する
1+2+3+・・・+100も計算の解答例
#include<iostream>
using namespace std;
int f(int w);
int i;
int main(){
   i=0;
   cout<<"1から100までの和:"<<f(0)<<endl;
}
int f(int w){
   i++;
   w+=i; //w=w+i;の簡略表現
   if(i+1<101)w=f(w);
   return(w);
}
入門
たった1カ所の変更です。


cout<<"1から100までの和:"<<f(100)<<endl;とする解答例
#include<iostream>
using namespace std;
int f(int i);
int w;
int main(){
   w=0;
   cout<<"1から100までの和:"<<f(100)<<endl;
}
int f(int i){
   w+=i; //w=w+i;の簡略表現
   if(i-1>0)w=f(i-1);
   return(w);
}
入門
ローカル変数版のプログラム解答例
#include<iostream>
using namespace std;
int f(int i,int w);
int main(){
   cout<<"1から100までの和:"<<f(100,0)<<endl;
}
int f(int i,int w){
   w+=i; //w=w+i;の簡略表現
   if(i-1>0)w=f(i-1,w);
   return(w);
}
入門


第13講の最後に関数の再帰的呼び出しを使えば、普遍的なプログラムできると書きました。
しかし、第14講に入ってからのすべてのプログラムはいちいちプログラムソースを書き換えなければなりません。
書き換えが実質1カ所とはいえ、これはソフトとしては使いにくいものです。
そこで、プログラムを変更しないでも1からnまでの和を求められるように変更します。
nの値がキーボードから入力できるようにするわけです。
そうすればいちいちプログラムソースをいじらなくて済むわけです。

コンソール画面からiの値を取得するには、
int i;
scanf("%d",&i);
とします。
私も久しぶりにscanfを使い忘れていましたが、必ず変数名の前に&を入れるのを忘れないようにしましょう。
scanfの使い方は、printfの使い方に似ています。
入門
%dは10進数を意味します。
もし16進数で入力したいなら%xです。
また、1文字入れたい場合は%cです。
浮動小数点で入力したいなら%fです。

これを使って先のプログラムを次のように変更して、Ctrl+F5をしてみてください。
#include<iostream>
using namespace std;
int f(int i,int w);
int main(){
   int i;
   cout<<"いくつまでの和を計算させるのかキーボードから入力してください。"<<endl;
   cout<<"末項=";
   scanf("%d",&i);
   cout<<"1から100までの和:"<<f(i,0)<<endl;
}
int f(int i,int w){
   w+=i; //w=w+i;の簡略表現
   if(i-1>0)w=f(i-1,w);
   return(w);
}
プログラムコードをいじらないで、いろいろな計算をさせることができます。
では、皆さん初項も指定できるように
初心者
に変更してください。
解答例は次話で。

第4話へ 第6話へ

戻る

C言語 C++ 講義第1部へ
VB講義へ
VB講義基礎へ

vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)