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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

7555閲覧

phpの再帰呼び出しについて、説明をしてほしいです

z1167474

総合スコア14

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2016/10/26 12:13

1から入力した数値までの和を出力するphpの構文があり、
再帰呼び出しを使用して、下記の構文があるのですが
再帰呼び出しについて、あまり理解ができておらず、
どうして、sample関数をこのように記述するのかがわかりません。
どなたか、説明してもらえると幸いです。
return(1)というのもよくわかってないので、それの意味も教えてもらいたいです。

php

1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta charset="UTF-8"> 6 <title>再帰呼び出しの練習</title> 7</head> 8 9<body> 10 <form method="POST" action="ex13.php"> 11 1から指定された値までの和を計算します<br> 12 数値を入力:<input type="number" name="n"><br> 13 <input type="submit" value="和を計算"> 14 </form> 15<?php 16if(isset($_POST["n"])){ 17 //ここでPOSTされた数値を取得 18 $n = $_POST["n"]; 19 //関数を呼び出し 20 $arg = sample($n); 21 //結果を画面に出す 22 echo($arg); 23 24} 25 26//関数sample 27function sample($arg){ 28 if($arg == 1) return(1); 29 else return($arg + sample($arg -1)); 30}

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

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

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

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

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

A.Ichi

2016/10/26 13:24

すみません、if($arg <= 1) return(1);と変更させてください。
A.Ichi

2016/10/26 13:26

できればif($arg <= 1) return($arg);の方が良いです。(度々ですみません)
A.Ichi

2016/10/26 15:25

私も同じ方かと思いましたが、別の方ですね。大変失礼しました。0の以下の時ループしない為と答えが1なのも区別がつかず変かなと思い、書かせて頂きました。
guest

回答2

0

ベストアンサー

php

1function sample($arg){ 2 if($arg == 1) 3 return(1); 4 else 5 return($arg + sample($arg -1)); 6} 7

$argが3の時をシュミレートすると
sample(3)
は3+sample(2)を返す
では
sample(2)
は2+sample(1)を返す
最後に
sample(1)
は1を返す

つまり数学の式みたいに考えると
sample(3) = 3+sample(2)
sample(2) = 2+sample(1)
sample(1) = 1
それぞれ代入していくと
sample(3) = 6
という結果が得られるという仕組みです。

投稿2016/10/26 12:32

編集2016/10/26 13:11
hiim

総合スコア1689

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

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

z1167474

2016/10/28 09:47

わかりやすく、また、ご丁寧に有難う御座います! おかげで理解できました
guest

0

もしかしてまったく同じのやってます?
https://teratail.com/questions/52923

投稿2016/10/26 12:19

toutou

総合スコア2050

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

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

z1167474

2016/10/28 09:47

自分ではありませんが、同じ問題のようですね...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問