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

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

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

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

teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

Q&A

5回答

1105閲覧

練習問題01

b1ackc0ffee

総合スコア267

PHP

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

teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

0グッド

0クリップ

投稿2015/07/14 17:36

編集2015/07/14 17:53

下記のような問題があります。
どのような求め方をされますか?

【問題】
1番目は1、2番目は1、3番目は2、4番目は3、5番目は5、...と続く数列があります。
50番目の値を表示するプリグラムを作成してください
【ヒント】
1番目の要素と2番目の要素が1で、3番目以降の要素は以下で決まる。
N(n) = N(n-1) + N(n-2)

※phpで回答してください❤️
※回答時間も教えてください❤️

以上、宜しくお願いいたします。

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

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

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

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

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

guest

回答5

0

さらに奇をてらった書き方をすると、配列も使わず、再帰関数も使わず、変数のスワップもせず、3つのスカラーな変数だけ($_0 $_1 $i)で解けます。

lang

1<?php 2$_0 = 0; 3$_1 = 1; 4 5for ($i=1; $i<50; $i++) { 6 ${"_".($i&1)} = $_0 + $_1; 7} 8 9var_dump($_0 + $_1); // int(12586269025)

所要時間は 15 分ぐらい(9割ぐらい変数展開の試行錯誤(^_^;))


さらにもっと奇をてらってみました。

lang

1<?php 2function main() 3{ 4 ${0} = 0; 5 ${1} = 1; 6 7 for ($i=1; $i<50; $i++) { 8 ${$i&1} = ${0} + ${1}; 9 } 10 11 var_dump(${0} + ${1}); // int(12586269025) 12 13 // このスコープには下記の3つの変数しか存在しない 14 print_r(get_defined_vars()); 15 /* 16 Array 17 ( 18 [0] => 4807526976 19 [1] => 7778742049 20 [i] => 50 21 ) 22 */ 23} 24 25// 関数にしているのはスコープの中の変数の一覧を得るためです 26// 関数じゃなくても動作します 27main();

やっていることは↑と同じですが、変数名を普通ではありえない数字だけの名前にすることで変数展開をシンプルにしました。


なお、この回答のような記法は実際に書かれるとブチ切れ必死なので使うべきではありません。

投稿2015/07/15 01:07

編集2015/07/15 01:30
ngyuki

総合スコア4514

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

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

0

フィボナッチ数列ですね。
for文を使うタイプは皆さんが答えてるので、奇をてらって再帰処理でいこうと思います。

lang

1$fibonacciFunc = function($num1, $num2, $num3) use (&$fibonacciFunc) { 2 if ($num3 <= 2) return $num1; 3 return $fibonacciFunc($num1 + $num2, $num1, $num3 - 1); 4}; 5echo $fibonacciFunc(1, 1, 50);

時間は約12分くらいです。

投稿2015/07/14 18:58

shiolier

総合スコア1156

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

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

0

「PHPで」とは数学的アプローチは無しでということでしょうか?
公式利用可なら次の通り
ど忘れしててwikipediaで確認しました。それも含めて15分程度です。

<?php $n=50; $f=(1+sqrt(5))/2; echo floor(pow($f,$n)/sqrt(5)+0.5); //for ($n=3; $n<=50; $n++)echo $n . ": " . floor(pow($f,$n)/sqrt(5)+0.5) . "<br/>"; ?>

投稿2015/07/15 08:04

編集2015/07/15 08:15
hirohiro

総合スコア2068

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

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

0

lang

1$n = []; 2$n[0] = 0; 3$n[1] = 1; 4for ($i = 2; $i < 51; $i++) { 5 $n[$i] = $n[$i - 1] + $n[$i - 2]; 6} 7var_dump($n[50]);

6分でした。

投稿2015/07/14 18:19

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

二つ考えました。二つ目の方がやっていることはわかりやすいと思いますが、無駄に値の入った配列ができてしまうので一つ目も考えました。回答時間はひとつ7分ぐらいです。

$first = 1;
$second = 1;
$next = 1;

//$firstは二つ前の数字、$secondはひとつ前の数字が入るようにする。
for ($i = 1; $i < 49; $i++) {
$first = $second;
$second = $next;
$next = $first + $second;
}
echo $next;


$fibonacci = array();
$fibonacci[0] = 1;
$fibonacci[1] = 1;
for ($i = 2; $i < 50; $i++) {
$fibonacci[$i] = $fibonacci[$i-1] + $fibonacci[$i-2];
}

echo $fibonacci[49];

投稿2015/07/14 18:09

tempakyousuke

総合スコア155

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問