|
|
|
อยากถามเกี่ยวกับ การเขียนแบบ Recursive php |
|
|
|
|
|
|
|
ทำไม่ได้จร๊
|
|
|
|
|
Date :
2013-06-03 15:31:06 |
By :
dekkuza |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองค้นหาดูสิครับ มีเยอะแยะเลย
Code (PHP)
function fib($n)
{
if($n === 0) {
return 0;
} elseif ($n === 1) {
return 1;
}
return fib($n - 1) + fib($n - 2);
}
for($i = 0; $i < 10; $i++) {
echo fib($i) . '<br />';
}
|
|
|
|
|
Date :
2013-06-03 15:32:26 |
By :
cookiephp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ช่วยอธิบายหน่อยได้ไหม ครับ อ่านโค้ดแล้วผมไม่เข้าใจ
Recursive function เป็นรูปแบบของฟังก์ชันแบบเวียนซ้ำ
ส่วน fibonacci number คือ ลำดับเลข
คือผมไม่เข้าใจการนำโจทย์มาสร้างโปรแกรม
ที่ print ค่าจาก parameter n = ? เช่นค่า n=6 จะปรับ 1 2 5 6
|
|
|
|
|
Date :
2013-06-03 16:35:23 |
By :
bankNay |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(1 === 0) { เครื่องหมาย === 3 ตัวนี้หมายความว่าไรหรอครับ ไม่เคยเหน
|
|
|
|
|
Date :
2013-06-03 17:24:46 |
By :
bankNay |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
=== ( เท่ากันทุกประการ ทั้งค่าและชนิด )
|
|
|
|
|
Date :
2013-06-03 17:57:26 |
By :
WiTT |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อ่อ ขอบคุณมา ครับ
|
|
|
|
|
Date :
2013-06-04 07:58:23 |
By :
bankNay |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
write a recursive function for computing Fiboncci nember Print ค่า N ออกมา n = 4 >>>> 1 1 2 3
n= 6 >>>> 1 1 2 3 5 8
จงหา n : 10,20,30,40,50,60
Code (PHP)
function fib($n)
{
if($n === 10) {
return 0;
} elseif ($n === 1) {
return 1;
}
return fib($n - 1) + fib($n - 2);
}
for($i = 0; $i < 10; $i++) {
echo fib($i) . '<br />';
}
Code (PHP)
function fib($n)
{
if($n === 20) {
return 0;
} elseif ($n === 1) {
return 1;
}
return fib($n - 1) + fib($n - 2);
}
for($i = 0; $i < 10; $i++) {
echo fib($i) . '<br />';
}
ถูกป่าว ครับ
|
|
|
|
|
Date :
2013-06-05 09:10:38 |
By :
bankNay |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่มีใครทราบเลยหรา ครับ
|
|
|
|
|
Date :
2013-06-06 16:37:15 |
By :
bankNay |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไปแก้ function ทำไมอะครับสามารถเรียกใช้งาน function ได้เลยครับ
Code (PHP)
$arr=array("10","20","30","40","50","60");
foreach($arr as $val){
echo fib($val)."</br>";
}
|
|
|
|
|
Date :
2013-06-06 16:48:02 |
By :
Manussawin |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
function fib($n)
{
if($n === 0) {
return 0;
} elseif ($n === 1) {
return 1;
}
return fib($n - 1) + fib($n - 2);
$arr=array("10","20","30","40","50","60");
foreach($arr as $val){
echo fib($val)."</br>";
}
แบบนี้ รันไม่ออก
|
|
|
|
|
Date :
2013-06-07 13:45:58 |
By :
bankNay |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ในฟังก์ชั่น fib
ลองเพิ่ม $n = (int)$n; ก่อนเปรียบเทียบค่าดูครับ
|
|
|
|
|
Date :
2013-06-07 14:09:13 |
By :
{Cyberman} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่ต้องไปครอบตัวเลขให้เป็นสตริงครับ
"10","20" เนี่ยไม่ต้อง
หรือจะเพิ่มแบบที่คุณ Cyberman บอกก็ได้
Code (PHP)
function fib($n)
{
$n = (int)$n;
if($n === 0) {
return 0;
} elseif ($n === 1) {
return 1;
}
return fib($n - 1) + fib($n - 2);
$arr=array(10,20,30,40,50,60);
foreach($arr as $val){
echo fib($val)."<br />";
}
|
|
|
|
|
Date :
2013-06-07 14:11:30 |
By :
cookiephp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
งง ครับ ผมเพิ่งหัดเรียน ยัง งง ครับ - -
|
|
|
|
|
Date :
2013-06-07 14:41:10 |
By :
bankNay |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
function fib $n =(10)$n;
{
if($n === 0) {
return 0;
} elseif ($n === 1) {
return 1;
}
return fib($n - 1) + fib($n - 2);
}
for($i = 0; $i < 10; $i++) {
echo fib($i) . '<br />';
}
?>
|
|
|
|
|
Date :
2013-06-07 14:41:22 |
By :
bankNay |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คือ น้องครอบตัวเลข เช่น จาก 20 ให้เป็น "20" ดังนั้น "ชนิด" ของมันจะเป็น "สตริง" ไม่ใช่ "ตัวเลข"
ดังนั้นเมื่อตรวจสอบด้วย === มันจะให้ผลเป็น false เสมอ เก็ตมั้ยครับ
เพราะ === มันตรวจสอบ "ชนิดของข้อมูล" ด้วย ว่าตรงกันหรือไม่
function fib($n)
{
// ที่มันไม่ออกในตอนแรก เพราะน้องครอบตัวเลขด้วย " $n
// ที่ส่งมาจึงมีชนิดเป็น "สตริง"
// เพราะ $n เทียบกับ 0 ด้วย === (สตริง === ตัวเลข) จึงไม่มีทางเป็นจริง
if($n === 0) {
return 0;
} elseif ($n === 1) { // อันนี้ก็จะไม่มีทางเป็นจริง
return 1;
}
// และจะมาตรงนี้เสมอ ทำให้การคำนวณผิดพลาด
return fib($n - 1) + fib($n - 2);
}
แก้ด้วยการ cast
function fib($n)
{
// วิธีแก้คือ แปลงค่าที่รับมาให้เป็นตัวเลขก่อน ด้วยการ cast
// คราวนี้แม้จะส่งมาเป็นสตริง หากเป็นสตริงที่แปลงเป็นตัวเลขได้ ก็จะถูกแปลงเป็นชนิดตัวเลข
$n = (int)$n;
if($n === 0) {
return 0;
} elseif ($n === 1) {
return 1;
}
return fib($n - 1) + fib($n - 2);
}
|
ประวัติการแก้ไข 2013-06-07 14:54:16
|
|
|
|
Date :
2013-06-07 14:53:51 |
By :
cookiephp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมขอบคุณ คุณแมวของคุกกี้ จริงๆครับ ผมเขียนโปรแกรมมาได้ซักพัก แต่ไม่เคยเข้าใจหลักการทำงาน การเขียนแบบ Recursive เลย
จนได้มาอ่านกระทู้นี้้ แล้วลองนั่งคิดมือดู จนเข้าใจหลักการทำงาน ขอบคุณมากๆ ครับ
|
|
|
|
|
Date :
2013-06-07 16:06:41 |
By :
tongjaab |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากครับ อิอิ
|
|
|
|
|
Date :
2013-06-07 17:42:32 |
By :
bankNay |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 01
|