براي فاکتوريل مي تونيد تابع رو بصورت بازگشتي زير بنويسيد:
PHP:
function Factorial($number)
{
if ($number < 0)
{
return 'Invalid Input';
}
else if ($number == 1)
{
return $number;
}
else
{
return ($number == 0) ? 1 : $number * Factorial($number - 1);
}
}
و براي حالت غير بازگشتي هم مي تونيد از تابع زير استفاده کنيد.
PHP:
function Factorial2($number)
{
$fact = 1;
if ($number < 0)
{
return 'Invalid Input';
}
else
{
for ($i = 1; $i <= $number; $i++)
{
$fact *= $i;
}
}
return $fact;
}
براي جمع دو عدد بوسيله جمع هاي متوالي مي تونيد اين تابع رو استفاده کنيد:
PHP:
function MulAdd($a, $b)
{
$min = min($a, $b);
$max = max($a, $b);
$mul = 0;
for ($i = 1; $i <= $min; $i++)
{
$mul += $max;
}
return $mul;
}
در اين تابع من براي اينکه تابع به تعداد کمتري تکرار بشه توسط توابع min و max به ترتيب براي بدست آوردن کوچکترين عدد و بزرگترين عدد که بعنوان ورودي انتخاب مي شوند استفاده کردم، در نتيجه تابع ما بهينه تر هست.
البته تابعي هم که خودتون براي جمع دو عدد نوشتيد صحيح هست اما روشي که شما استفاده کرديد فرموله شده هست که باز در اون عمل ضرب هم ديده ميشه در صورتي که شما مي خواهيد فقط توسط جمع اين کار صورت بگيره (البته به لحاظ Syntax مشکل داره که بايد بصورت زير نوشته بشه)
PHP:
function calculate($a, $b)
{
$calculate = $a * ($b-1) + $a;
return $calculate;
}
تابع fact هم که توسط خودتون نوشته شده به لحاظ Syntax خطاهاي زيادي داره ولي روشي که به کار برديد فکر مي کنم قصد داشتيد حالت بازگشتي داشته باشه لذا تصحيح شده اون بصورت زير هست (البته فراموش نکنيد که فاکتوريل اعداد کمتر از صفر وجود نداره ولي تابع شما براي اعداد منفي مناسب نيست و باعث ميشه تا در يک حلقه بي نهايت وارد بشه و در نتيجه باعث down شدن سرور ميشه)
PHP:
function fact($a)
{
if ($a != 0) return ($a * fact ($a-1));
return 1;
}
موفق باشيد.