چطور میشه از یک سری اعداد که با آرایه دریافت شدن با استفاده از یک تابع برگشتی به طور مثال حاصل ضربشونو حساب کرد...
Printable View
چطور میشه از یک سری اعداد که با آرایه دریافت شدن با استفاده از یک تابع برگشتی به طور مثال حاصل ضربشونو حساب کرد...
آرایه را با مکان در حال خواندنش به ورودی تابع میدی
مثال :
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);
}
وقتی نوشتم اینجور شده...نتونستم خوب درک کنم اینو... از ریترن آخرشم خطا میگیره...کد HTML:[LTR_INLINE][QUOTE]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);
}
[/QUOTE]
[/LTR_INLINE]
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);
}