تابع فاكتوريل و تابع ضرب

scooter2005

Member
تابع فاكتوريل در php
دوستان ممنون اگر كدم اشتباه هست تصحيح كنن اگر جايي نياز به حلقه داره ممنون راهنمايي كنيد

کد:
function fact ($a , $b)
$fact;
if ($a !=0);
return ($a * $fact ($a-1));
return 1;
echo $fact;
تابع

ضرب دو عدد و پياده سازي ضرب با جمع

کد:
function calculate ($a, $b)
$calculate = $a * ($b-1) + $a;
echo $calculate;
 

sunrise

Member
براي فاکتوريل مي تونيد تابع رو بصورت بازگشتي زير بنويسيد:
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;	
}
موفق باشيد.
 

Masoud1365

مدیر انجمن
یه سوال این $b در تابع اول برای چیه !؟
تابع دوم هم پیاده سازی ضرب باید با استفاده از جمع باشه نه اینکه از ضرب استفاده بشه هر دو مشکل دارد . سعی کن خودت درستش کنی :wink:
 

Masoud1365

مدیر انجمن
بله ! باز دوباره پست من با جناب حامد خان همزمان شد . به هر حال ممنون آقا حامد .
 

scooter2005

Member
استادمون گفت جفت کدهای در مورد ضرب با استفاده از جمع غلط هست ضمن اینکه باید هرچی می نویسیم بازگشتی باشه ... ممنون اگر کسی بنویسه
 

sunrise

Member
استادمون گفت جفت کدهای در مورد ضرب با استفاده از جمع غلط هست ضمن اینکه باید هرچی می نویسیم بازگشتی باشه ... ممنون اگر کسی بنویسه
نمي دونم منظور استاد شما از اينکه غلط هست توابع چيه، چون به هر صورت عمل ضرب به درستي انجام ميشه، بهتر بود منظورش رو يه طور ديگه بيان مي کرد و ميگفت اين اون چيزي نيست که مورد نظر من هست! مثلا مي تونست بگه تابع بايد بصورت بازگشتي نوشته بشه. البته اين رو هم فراموش نکنيد تا زماني که توابع غيربازگشتي رو بشه به جاي توابع بازگشتي استفاده کرد توصيه ميشه از توابع غير بازگشتي که زمان کمتري رو صرف مي کنند استفاده کرد (البته گاهي اوقات برعکس ممکنه باشه که البته خيلي احتمالش کم هست)

تابع بازگشتي براي ضرب بوسيله جمع مي تونيد اينطوري داشته باشيد:
PHP:
function mul($a, $b)
{
	if ($b == 0) return 0;
	return $a + mul($a, $b - 1);
}
موفق باشيد.
 
آخرین ویرایش:

scooter2005

Member
نمي دونم منظور استاد شما از اينکه غلط هست توابع چيه، چون به هر صورت عمل ضرب به درستي انجام ميشه، بهتر بود منظورش رو يه طور ديگه بيان مي کرد و ميگفت اين اون چيزي نيست که مورد نظر من هست! مثلا مي تونست بگه تابع بايد بصورت بازگشتي نوشته بشه. البته اين رو هم فراموش نکنيد تا زماني که توابع غيربازگشتي رو بشه به جاي توابع بازگشتي استفاده کرد توصيه ميشه از توابع غير بازگشتي که زمان کمتري رو صرف مي کنند استفاده کرد (البته گاهي اوقات برعکس ممکنه باشه که البته خيلي احتمالش کم هست)

تابع بازگشتي براي ضرب بوسيله جمع مي تونيد اينطوري داشته باشيد:
PHP:
function mul($a, $b)
{
    if ($b == 0) return 0;
    return $a + mul($a, $b - 1);
}
موفق باشيد.

ممنون این روشی که نوشتید همین روشی هست که میگه a * b = A *B-1 ولی چیزی که من می خوام دقیقا اینه
3 * 4 = 12
یعنی بگه 3+3+3+3 می خوام فرمول تابع از همچین چیزی پیروی کنه
ممنون اگر زحمتش رو بکشی
 

farik

Well-Known Member
با سلام...
دوست عزيز اين تابعي كه شما ميخواستين براي ضرب به صورت بازگشتي:
PHP:
<?php
function mul($FirstNum,$SecondNum){
	if($SecondNum!=1)
	{
		$FirstNum+=mul($FirstNum,$SecondNum-1);
	}
	return $FirstNum;
}
?>
با تشكر TabOTabDesign
 

sunrise

Member
ممنون این روشی که نوشتید همین روشی هست که میگه a * b = A *B-1 ولی چیزی که من می خوام دقیقا اینه
3 * 4 = 12
یعنی بگه 3+3+3+3 می خوام فرمول تابع از همچین چیزی پیروی کنه
ممنون اگر زحمتش رو بکشی
والا من تنها چيزهايي که به ذهنم رسيد و فکر مي کنم درست هم باشه و حتي من توي درس هاي دانشگاهي هم که معمولا همين طور چيزها هستند هميشه روال همينطور بوده! حالا اينکه مي گيد بشه 3+3+3+3 يعني اينکه عددي که اول داده ميشه (يعني همون $a) به تعداد $b با خود عدد $a جمع بشه و خب من هم همين کار رو کردم! متوجه منظور شما نميشم! اين رو اگه ببينيد، دقيقا همين چيزي که شما مي خواهيد هست، يعني تابع به تعداد 5 بار تکرار ميشه و يعني اينکه عدد اولي 5 بار با خودش جمع ميشه.
کد:
function mul($a, $b)
{
	static $count = 1;
    if ($b == 0) return 0;
    echo "$count<br />";
    $count++;
    return $a + mul($a, $b - 1);
}  

echo mul(4, 5);
خروجي رو که بصورت عدد نمايش داده ميشه از 1 تا 5 و در نهايت ضرب 5*4 يعني 20 خواهد بود. اين ديگه تنها راهي بود که بصورت ضرب بازگشتي با استفاده جمع من مي تونستم بنويسم و شکي هم ندارم که اين روش هموني هست که مد نظر شما هستش و خب بهتره بگيد استاد خودش يه نمونه ارائه کنه تا ببينيم واقعا اين چي هست!!!
 

جدیدترین ارسال ها

بالا