PDA

View Full Version : سوال: استفاده از آرایه ها در توابع برگشتی...



elahe7
پنج شنبه 26 آبان 1390, 12:41 عصر
چطور میشه از یک سری اعداد که با آرایه دریافت شدن با استفاده از یک تابع برگشتی به طور مثال حاصل ضربشونو حساب کرد...

wolf_majid
پنج شنبه 26 آبان 1390, 14:09 عصر
آرایه را با مکان در حال خواندنش به ورودی تابع میدی
مثال :
private long mul(int[] array, int loc = 0)
{
if (loc >= array.Length || loc < 0)
{
//یک پیغتم مناسب بده و از متد خارج شو
}
else if (loc == array.Length-1)
return array[loc];

return array[loc] * mul(array, ++loc);

}

elahe7
پنج شنبه 26 آبان 1390, 14:49 عصر
static void Main(string[] args)
{
int n = Convert.ToInt32(Console.ReadLine());
int[] a = new int[n];

for (int i = 0; i < n; i++)
a[i] = Convert.ToInt32(Console.ReadLine());
int m=0;
long z = zarb(a,m);
Console.WriteLine(z.ToString());

Console.ReadKey();

}

private static long zarb(int [] a, int m)
{
if (m < 0 || m > a.Length)
return 0;
return a[m]* zarb(a,++m);
}


وقتی نوشتم اینجور شده...نتونستم خوب درک کنم اینو... از ریترن آخرشم خطا میگیره...

wolf_majid
پنج شنبه 26 آبان 1390, 17:06 عصر
static void Main(string[] args)
{
int n = Convert.ToInt32(Console.ReadLine());
int[] a = new int[n];

for (int i = 0; i < n; i++)
a[i] = Convert.ToInt32(Console.ReadLine());
int m = 0;
long z = zarb(a, m);
Console.WriteLine(z.ToString());

Console.ReadKey();
}
//پیش فرض برای ام گذاشتم که دیگه نیازی به مقداردهی پارامتر دوم نباشد
private static long zarb(int[] a, int m=0)
{
//اولا" چرا صفر برگردونه در صورتیکه خطاست
// بعدش اشتباه از من بود به این قسمت نیازی نیست چون این تابع توسط
//برنامه نویس صدا زده می شه نیازی به این ایف ندارد
/*
if (m < 0 || m > a.Length)
return 0;
*/

// ما می خواهیم این ضرب تا زمانی ادامه پیدا کند
//که به آخر آرایه رسیدیم پس
//صدا زدن آرایه را همینجا با این شرط متوقف می کنیم
if (m == a.Length - 1)
return a[m];
return a[m] * zarb(a, ++m);
}