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

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

ただいまの
回答率

90.61%

  • PHP

    19881questions

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

  • teratail

    414questions

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

練習問題01

受付中

回答 5

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 666

b1ackc0ffee

score 197

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

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

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

以上、宜しくお願いいたします。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

+1

二つ考えました。二つ目の方がやっていることはわかりやすいと思いますが、無駄に値の入った配列ができてしまうので一つ目も考えました。回答時間はひとつ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];

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

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

6分でした。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

フィボナッチ数列ですね。
for文を使うタイプは皆さんが答えてるので、奇をてらって再帰処理でいこうと思います。
$fibonacciFunc = function($num1, $num2, $num3) use (&$fibonacciFunc) {
        if ($num3 <= 2) return $num1;
        return $fibonacciFunc($num1 + $num2, $num1, $num3 - 1); 
};
echo $fibonacciFunc(1, 1, 50);
時間は約12分くらいです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

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

<?php
$_0 = 0;
$_1 = 1;

for ($i=1; $i<50; $i++) {
  ${"_".($i&1)} = $_0 + $_1;
}

var_dump($_0 + $_1); // int(12586269025)

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


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

<?php
function main()
{
    ${0} = 0;
    ${1} = 1;

    for ($i=1; $i<50; $i++) {
        ${$i&1} = ${0} + ${1};
    }

    var_dump(${0} + ${1}); // int(12586269025)

    // このスコープには下記の3つの変数しか存在しない
    print_r(get_defined_vars());
    /*
    Array
    (
        [0] => 4807526976
        [1] => 7778742049
        [i] => 50
    )
    */
}

// 関数にしているのはスコープの中の変数の一覧を得るためです
// 関数じゃなくても動作します
main();

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


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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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/>";
?>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    19881questions

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

  • teratail

    414questions

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