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

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

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

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

PHP

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

Q&A

解決済

5回答

1595閲覧

while文のみで300を超えるまでのフィボナッチ数列を作りたいのですが、作り方がいまいち分かりません。

退会済みユーザー

退会済みユーザー

総合スコア0

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

PHP

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

0グッド

1クリップ

投稿2018/05/31 19:21

if文とwhile文を用いて"300を超えるまでのフィボナッチ数列"を作ったのですが、whileのみで"300を超えるまでのフィボナッチ数列"を作る方法がいまいち分かりません。while文だけでも書けるとご指摘を受け、それ以上何も言われず自分で考えましたが、if()break;を使わずにというのがどうしても浮かんできませんでした。
下記にif文を使って書いたコードを載せました。
よろしければご回答よろしくお願いします。

if文を使ったコードです。

php

1<?php 2$a=1; 3$i=0; 4 5while(1){ 6 $s=($a+$i); 7 8 echo $s."&nbsp;"; 9 if($s>300) break; 10 11 $a=$i; 12 $i=$s; 13}

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

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

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

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

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

guest

回答5

0

https://rosettacode.org/wiki/Fibonacci_number
のコードを研究してみてください。

投稿2018/05/31 22:25

katoy

総合スコア22324

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

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

0

ベストアンサー

皆さんのおかげで無事解決できました。様々なご指摘ありがとうございました。

私が書いたコードです。変数を変える前に作れたので、変数についてはご了承ください。

php

1<?php 2 3$a=1; 4$b=0; 5$s=0; 6 7$s=$a+$b; 8 9while(($s=$a+$b)<300){ 10 echo $s=$a+$b; 11 $a=$b; 12 $b=$s; 13echo "&nbsp;"; 14} 15echo $s=$a+$b; 16 17?> 18

出力された結果です。

php

11 1 2 3 5 8 13 21 34 55 89 144 233 377

投稿2018/06/01 05:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

こんにちは、

質問欄にあるコードを見て気になったこと

変数をa,i,sにしていますが、これだと分かりづらいです。
フィボナッチ数列なのでa0,a1,a2にすることをおすすめします。

以下のソースコードでif文を使わずできます。

php

1<?php 2 3$a0 = 1; 4$a1 = 1; 5$a2; 6 7 8while($a0 <= 300){ 9 10 $a2 = $a0 + $a1; 11 $a0 = $a1; 12 $a1 = $a2; 13 echo "$a0 "; 14 15}

<実行結果>
1 2 3 5 8 13 21 34 55 89 144 233 377

投稿2018/06/01 00:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

現在のループは以下の構造になっています。

PHP

1while(1) { 2 処理A 3 if($s>300) break; 4 処理B 5}

これを機械的にwhileのみ(breakやcontinueを使わない)のであれば以下のようにすればよいと思います。
まず、breakをループの先頭に移動します。

PHP

1処理A 2while(1) { 3 if($s>300) break; 4 処理B 5 処理A 6}

if() breakをwhileの条件に変換します。

PHP

1処理A 2while($s<=300) { 3 処理B 4 処理A 5}

これでできると思いますが、もとのプログラムと比べて良くなったかというと、どうですかね。
ご参考までに。

投稿2018/05/31 23:39

ockeghem

総合スコア11701

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

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

0

こんにちは。

$s が 300 を超えたかどうかの判定を、以下のように while 条件で行えばよいです。

php

1<?php 2$a=1; 3$i=0; 4$s=0; 5 6while($s<300){ 7 $s=($a+$i); 8 9 echo $s."&nbsp;"; 10 11 $a=$i; 12 $i=$s; 13} 14

上記のコードで、ご質問にあるコードと同じ出力結果になります。
参考になれば幸いです。

投稿2018/05/31 20:20

jun68ykt

総合スコア9058

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

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

退会済みユーザー

退会済みユーザー

2018/05/31 21:03

ご回答ありがとうございます。正しく反映されて大変恐縮なのですが、ループを抜けてから echo $s=($a+$i)."&nbsp;";で表示させたいのですが、他の部分をどう変えればよいかヒントだけでも教えてもらえないでしょうか?もしお答えしていただけたら幸いです。
jun68ykt

2018/05/31 21:30

やりたいことは フィボナッチ数列で、300を超える、最小の項(このコードだと 377 )だけを echo で出力したい ということでしょうか?
退会済みユーザー

退会済みユーザー

2018/05/31 21:40 編集

300を超えた場合に処理をとめるなら 300も処理をふくめるんじゃね(起きないが
退会済みユーザー

退会済みユーザー

2018/06/01 00:33

変数をa,i,sにするよりa0,a1,a2にした方がわかりやすくなると思います。
papinianus

2018/06/01 00:59

<?php $a=1; $i=0; $s=0; while($s<300){ $s=($a+$i); $a=$i; $i=$s; } echo $s."&nbsp;";
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問