gcogco10 Ответов: 1

Как написать алгоритм для тренировки факторной рекурсии в C#?


Привет Команда

Мне нужна некоторая помощь, чтобы написать факториальную рекурсию в c#, ниже приведены мои мысли о написании этого алгоритма в c#.

Что я уже пробовал:

// C# program to find factorial 
// of given number 
using System; 

class Test { 
	// method to find factorial 
	// of given number 
	static int factorial(int n) 
	{ 
		if (n == 0) 
			return 1; 

		return n * factorial(n - 1); 
	} 

	// Driver method 
	public static void Main() 
	{ 
		int num = 5; 
		Console.WriteLine("Factorial of "
						+ num + " is " + factorial(5)); 
	} 
} 

Richard MacCutchan

Что в этом плохого?

CPallini

Ваш код в порядке. Тогда в чем проблема?

gcogco10

Да, код в порядке, то, что я хочу знать. Эта программа использует алгоритм для работы над рекурсией да или нет? Если нет, то как будет улучшен этот код?

Dave Kreskowiak

Ответить на вопрос о рекурсии очень просто. Вызывает ли функция, выполняющая эту работу, саму себя? Если это так, то ответ-да.

Возможно, вы захотите взглянуть на свой факториальный функциональный код, чтобы ответить на этот вопрос.

1 Ответов

Рейтинг:
8

OriginalGriff

Цитата:
Эта программа использует алгоритм для работы над рекурсией да или нет? Если нет, то как будет улучшен этот код?

Да, вроде того. Он всегда возвращает только 120, независимо от значения, которое я ввел num
Factorial of 3 is 120


Чтобы улучшить его? Не рассчитывайте его вообще. Вместо этого предварительно вычислите все те, которые вписываются в 32-битное целое число. Поскольку их всего 13 (от 0! до 12! включительно) проще, быстрее и намного эффективнее выделить массив из 13 целых чисел и просто проверить, что запрашиваемое значение находится в диапазоне. Ваше приложение либо выйдет из строя, либо даст неверное значение, если я запрошу 13! или выше ...


Richard MacCutchan

Console.WriteLine("Factorial of " + num + " is " + factorial(5));

OriginalGriff

Я вроде как заметил это ... но он этого не сделал.
Хорошая простая небольшая отладка для него (и указание на его режим тестирования :вздох: )

Richard MacCutchan

Прошу прощения, я должен был это предвидеть.

OriginalGriff

Не нужно извиняться! :Д