الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الأستدعاء الذاتى للدوال - Recursion

رائج
بدأه Omar Eladel في 8 فبراير 2009 · 33 رد · 24,790 مشاهدة · في المواضيع والدروس
مشاركة: واتساب X فيسبوك تيليجرام
#26

كلام جميل أوي بس فيه مشكلة. دلوقتي لو الرقم بالسالب, هيحلها أزاي؟

ده كود Iterative أنا كتبته بالC:

#include <stdio.h>
#include <math.h>

void factorial ( int );

int main ( void )
{
	int number;

	printf("Enter a number: \n");
	scanf("%d", &number);

	factorial ( number );
}

void factorial ( int num )
{
	int i;
	long int factorial = num;

	if ( num == 0 || num == 1 )
	   factorial = 1;

	else if ( num == -1 )
	   factorial = -1;

	else if ( num > 1 ) {
	   for( i = num - 1; i > 1; i--) {
		  factorial *= i;
	   }
   }

   else if ( num < 1 ) {
	   for( i = -num - 1; i > 1; i--) {
		  factorial *= i;
	   }
   }

	printf("\nFactorial = %ld\n", factorial);
}
#27

السلام عليكم ,,

اقتباس
كلام جميل أوي بس فيه مشكلة. دلوقتي لو الرقم بالسالب, هيحلها أزاي؟

هذه طريقة :

[color= #0000ff;]int factorial[color= #000000;]( [color= #0000ff;]int number [color= #000000;])[color= #000000;]{

 

	[color= #0000ff;]if[color= #000000;]( number [color= #000000;]== [color= #ff0000;]0 [color= #000000;]|| number [color= #000000;]== [color= #ff0000;]1 [color= #000000;])

		[color= #0000ff;]return [color= #ff0000;]1;

 

	[color= #0000ff;]if[color= #000000;]( number [color= #000000;]> [color= #ff0000;]1 [color= #000000;])[color= #000000;]{

		[color= #0000ff;]for[color= #000000;]( [color= #0000ff;]int i [color= #000000;]= number[color= #ff0000;]-1; i [color= #000000;]> [color= #ff0000;]1; [color= #000000;]--i [color= #000000;])

		number [color= #000000;]*[color= #000000;]= i;

	[color= #000000;]}

 

	[color= #0000ff;]else[color= #000000;]{

		number [color= #000000;]= abs[color= #000000;]( number [color= #000000;]);

		[color= #0000ff;]for[color= #000000;]( [color= #0000ff;]int i [color= #000000;]= number[color= #ff0000;]-1; i [color= #000000;]> [color= #ff0000;]1; [color= #000000;]--i [color= #000000;])

		number [color= #000000;]*[color= #000000;]= i;

 

		number [color= #000000;]*[color= #000000;]= [color= #ff0000;]-1;

	[color= #000000;]}

 

	[color= #0000ff;]return number;

[color= #000000;]}
و لكن تذكر أن هذا هو تعريف مضروب العدد :

post-89451-1234177910_thumb.png

أي عدد أصغر أو يساوي الواحد مضروبه يساوي واحد :)

أي أن دالتنا لا تتبع التعريف الرياضي لمضروب العدد.

تحياتي ,,

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 9 فبراير 2009 في 14:21

#28

يبدوا اني وصلت متأخر

نقاش جميل حول الموضوع وياريت لو نشوف المواضيع هذي باستمرار

تشكر اخوي عمر على الموضوع والشكر موصول لباقي المشاركين.

متغيب

#29
اقتباس
لكن لماذا أضفت الموضوع فى قسم الـ Data Structures ، و لماذا لم تضفه فى قسم الدوال

لأن هذا الموضوع يُدرّس في مادة Data Structure في الغالب :-) , ولكن تم تعديله الى قسم الدوال ;-)

اقتباس
يمكن اختصار كل ما سبق الى PVOID واحدة .
اقتباس
باختصار اذا كان الـlocal variable حجمه اكبر من حجم PVOID فقم باستخدام الـdynamic allocation .

المعذرة .. لكن ماذا تقصد بالـPVOID .. هل هو اختصارا لل void pointer .. أعتقد أن PVOID مرّ علي في Win32 APIs .. لكن كنوع للمتغيّر ..

اقتباس
Fractal وهي شكل هندسي كل جزء منه يشبه الأخر ،،

اهه .. وضعت يدك على الجرح , هذا من التاثيرات الرائعة .. والتي أطمح في تنفيذها خلال الاجازة ان شاء الله ( تحتاج جلسة طويلة ) .. هل قمت بتنفيذها أو المحاولة على الأقل ..

fractal-tree2.jpg

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#30

فعلا الFractal هذا مجال ممتع وفيه صور خياليه لكنه صعب قليلا :wacko: ..

كنت قد طبقت Mandalbrot & Julia set بجافا بالاستعانه بأحد الكتب والمواقع بالطبع :) .

post-51148-1234211120_thumb.gif

post-51148-1234211128_thumb.gif

وهذه صوره شجره تعبانه :) .

post-51148-1234211134_thumb.gif

وده كود سي++ لMandalbrot باستخدم الloop ، ويفضل عمل direction للمخرج في ملف لأنه كبير شويه على شاشه الكونسول .. وسيطبع نجوم ** :

#include <iostream>
using namespace std;

#define MaxIters 200
#define SIZE	 80
#define BLACK	-1
#define LEFT	 -2.0
#define RIGHT	1.0
#define TOP	  1.0
#define BOTTOM   -1.0

int main(int argc, char *argv[])
{
	short   x, y, count;
	long double zr, zi, cr, ci;
	long double rsquared, isquared;

	for (y = 0; y < SIZE; y++)
	{
		for (x = 0; x < SIZE; x++)
		{
			zr = 0.0;
			zi = 0.0;
			cr = LEFT + x * (RIGHT - LEFT) / SIZE;

			ci = TOP + y * (BOTTOM - TOP) / SIZE;
			rsquared = zr * zr;
			isquared = zi * zi;

			for (count = 0; rsquared + isquared <= 4.0
							&& count < MaxIters; count++)
			{
				zi = zr * zi * 2;
				zi += ci;

				zr = rsquared - isquared;
				zr += cr;

				rsquared = zr * zr;
				isquared = zi * zi;
			}

			if (rsquared + isquared <= 4.0)
				cout << "*";	
			else
				cout << " ";	
		}
		cout << endl;
	}
	return 0;
}

لتنفيذ البرنامج :

g++ name.cpp -o name.exe

name.exe < out.txt

Happy Fractal :) .

تم تعديل هذه المشاركة بواسطة Wajdy Essam في 9 فبراير 2009 في 23:35

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#31
اقتباس
وهذه صوره شجره تعبانه .

بالعكس , جميلة , ويبدو أن الرياح شرقية عاصفة :wink:

اذا , لماذا لا نراك في قسم برمجة الألعاب والجرافكس :P , أعرف أنه قسم نائم .. لكن مجرّد سبات شتوي .

طبعا لم نخرج عن الموضوع :-) .. نحن نتكلّم عن فوائد ال Recursion ..

تم تعديل هذه المشاركة بواسطة الشمري في 10 فبراير 2009 في 00:11

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#32

الموضوع أصبح شيق جداً و رائع جداً

خاصة مع دخول موضوع Fractal فيه :)

بالنسبة لهذا الموضوع ،، الا يوجد Tutorial مبسط للبداية فيه لأن مواضيع الرسم تستهوينى جداً :lol: (أعتقد انه موضوع رياضى ، صحيح ؟؟)

أشكركم أخوتى جميعاً على إضافاتكم هذه التى أثرت الموضوع :)

وفقكم الله ،،

#33
اقتباس
المعذرة .. لكن ماذا تقصد بالـPVOID .. هل هو اختصارا لل Void Pointer .. أعتقد أن PVOID مرّ علي في Win32 APIs .. لكن كنوع للمتغيّر ..

نعم أخي الشمري أقصده كمؤشر عامة .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#34

راجع قسم الخوارزميات بخصوص الفراكتال.

-_-

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

مواضيع مشابهة