質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

6050閲覧

func(C言語、再帰的処理)について

benefit2025

総合スコア3

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/06/22 16:38

編集2020/06/22 16:57

C言語の質問です!まったく初心者のものの簡単すぎる質問ですが、

下記の問題の意味を説明していただけますでしょうか。

int func(int x)
{
int y;

if(x<=0) return 0; y=x+func(x-1); return y;

}

①この関数に0を入力した時の戻り値 func(0) と、1を入力した時の戻り値 func(1) はいくつですか。
②この関数に5を入力した時の戻り値 func(5) はいくつですか。
③変数Xは関数funcの中でだけ有効だが、yは関数funeの外でも有効である(これは正しいことでしょうか。)

この問題の意味を説明や解き方を教えていただけますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

CとC#は別の言語なので、タグを修正しましょう。

問題の意味としては、再帰的処理の理解が出来ているかを問う問題だと思います。

投稿2020/06/22 16:49

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

benefit2025

2020/06/22 16:54

ありがとうございます。変更しました! 関数に数字を入れる際にはどのようにすればよろしいでしょうか。
Daregada

2020/06/22 16:57

頭の中で x (関数funcの引数)に 0 を入れたつもりになって、上から順に命令を実行するつもりで見て行ってください。
benefit2025

2020/06/22 17:03

ご返信、ありがとうございます。 ①の場合は0の場合は、func(0)の値は1、func(1)の値は1でよろしいでしょうか。 ②の場合はfunc(5)は9でよろしいでしょうか。 ③の場合は「変数Xは関数funcの中でだけ有効だが、yは関数funeの外でも有効である」で 正しいでしょうか。なぜならば、xはローカル変数で、yはグローバル変数(?)の認識で思うからです
otn

2020/06/22 17:06

いつの間にか、問題の意味だけじゃなくて、問題の解き方も教えて欲しいに書き換わってますね。 int func(int x) { return x+10; } なら①②に答えられますか?
benefit2025

2020/06/22 17:09

①func(0)の値は10、func(1)の値は11 ②func(5)の値は15 でしょうか。
otn

2020/06/22 17:12

では、元の問題に戻って、 func(0)、func(1)、func(2)、func(3)、func(4)、func(5) を順番に考えましょう。
otn

2020/06/22 17:12

③は、グローバル変数とは何かを理解しているかどうかを問うています。
benefit2025

2020/06/22 17:15

元の問題に戻って func(0)=1→ 正直-1だと思いますが、。よくわかりません func(1)=1 func(2)=3 func(3)=5 func(4)=7 func(5)=9
benefit2025

2020/06/22 17:19

③の場合は変数x、yともにfuncの外で有効である認識で正しいでしょうか。
Daregada

2020/06/22 17:19

途中の if 文の条件式と、return の機能を調べてみよう。
Daregada

2020/06/22 17:20

3.は「ローカル変数」とはどうやって作るのかを調べてみよう。
benefit2025

2020/06/22 17:21

func(0)=0になりますね! なぜならば、Xがx<=0の場合は、 戻り値(return 0)が0になるため!
otn

2020/06/22 17:26 編集

func(0) は if(x<=0) return 0;なので、0ですね func(1) は y=x+func(x-1); なのでxに1を代入して 1+func(0) func(2) は 2+func(1) func(3) は 3+func(2) func(4) は 4+func(3) func(5) は 5+func(4) さっきのが出来て何故これができない? > ③の場合は変数x、yともにfuncの外で有効である認識で正しいでしょうか。 何故? グローバル変数の宣言の仕方と、ローカル変数の宣言の仕方を、それぞれ知っていますか?
benefit2025

2020/06/22 17:25

x、Yは2つともローカル変数でしょうか。 ほんなら、変数x、yともに関数funcの中だけで有効な変数だと思います!
benefit2025

2020/06/22 17:36

ローカル変数は関すの中で宣言される、関数の呼び出し時作られる グローバル変数は関数の外で宣言される、プログラムの開始の時作られる ということであると覚えております。
otn

2020/06/22 17:41

では、最初何故yがグローバル変数だと思ったのでしょうか? 上記を忘れていた? int y; と書いてあるのが関数の外に見えた?
benefit2025

2020/06/22 17:57

確認ですが、 func(0) は 0で、func(1) は 1、func(5)=9 ですね!
benefit2025

2020/06/22 17:59

申し訳ないですが、XとYがどちらがローカル変数とグローバル変数かわかりません!
benefit2025

2020/06/22 18:30

変数x、yともに関数funcの中だけで有効な変数である認識は正しいでしょうか。
benefit2025

2020/06/22 18:45

ありがとうございます。僕の考えが甘いでした!!! ①func(0) は 0で、func(1) は 1、func(5)=15 ですね! ②変数x、yともに関数funcの中で有効な変数である認識でした!
otn

2020/06/23 00:53

はい。合ってます。 何故 > func(5)=9 ですね! と間違ってしまったのかの原因分析もしておきましょう。 ・x+func(x-1) の funcが目に入らず x+(x-1) に見えてしまった ・func(4) が4だと何の根拠もなく思い込んだ などなど。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問