Рекурсивный метод всех возможных разложений натурального числа n на множители - C#
Формулировка задачи:
Разработать рекурсивный метод для вывода на экран всех возможных разложений натурального числа n на множители (без повторений). Например, для n=12 на экран должно быть выведено:
2*2*3=12
2*6=12
3*4=12
Подскажите пожалуйста, можно ли как-то по другому сделать данную рекурсию? Получилось только через запись элементов в массив, но в конце получается что еще выдает 12=12, а это значит ошибся где-то, но ошибку никак не могу найти
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace Lab
- {
- class Program
- {
- static void F(int delitel, int n, int j, int m, int []a)
- {
- if (n == 1)//вывод на экран
- {
- for (int i = 0; i < j - 1; i++)
- Console.Write(a[i] + "*");
- if (j > 0)
- Console.WriteLine(a[j - 1] + "=" + m);
- return;
- }
- for (a[j] = delitel; a[j] <= n; a[j]++)//определение множителей
- if ((n % a[j]) == 0)
- F(a[j], n / a[j], j+1, m, a);
- }
- static void Main()
- {
- int[] a = new int[100];
- Console.Write("Введите число: ");
- int n = int.Parse(Console.ReadLine());
- int m = n;
- F(2, n, 0, m, a);//начальный делитель, число, начало массива, повторение числа, сам массив
- }
- }
- }
Решение задачи: «Рекурсивный метод всех возможных разложений натурального числа n на множители»
textual
Листинг программы
- if (j > 0 && a[j - 1] != m)
- Console.WriteLine(a[j - 1] + "=" + m);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д