Hagamos una función F (int x, list aList) que proporciona una lista de listas, cada una de las cuales suma x o más.
Agreguemos también todos los elementos de la lista de entrada L para obtener la suma S.
Ahora queremos listas que sumen S / 2 o más, que podemos obtener fácilmente por F (S / 2, L)
Ahora F (x, aList) se puede implementar de forma recursiva:
F (int x, list aList)
{
volver conjunto vacío de aList está vacío
tome el primer elemento E de una Lista,
{
si esto es más que x, entonces agregue E a outputList
}
llamada recursiva F (xE, LE)
{
si esto devuelve un conjunto vacío, entonces nada más que agregar a outputList
si esto devuelve algún conjunto de listas (rList), añada E a cada lista de rList y agregue a outputList
}
llamada recursivamente F (x, LE)
{
si esto devuelve un conjunto vacío, entonces nada más que agregar a outputList
si esto devuelve algún conjunto de listas (rList), entonces cada elemento de rList se agrega a outputList
}
return outputList
}
- ¿Cuántas pelotas de golf puedes meter en una tubería?
- Dados los vértices y los bordes de un gráfico, ¿cómo se verifica que el gráfico sea un hipercubo?
- ¿Cuál es la probabilidad de que un número elegido al azar sea un número primo?
- ¿Cómo puedo encontrar los números cuadrados más pequeños y más grandes que contienen los dígitos del 1 al 9 sin usar ningún lenguaje de programación?
- ¿Existe un algoritmo de tiempo polinómico para decidir si dos permutaciones generan [matemáticas] S_n [/ matemáticas]?
Espero que el código psuedo sea fácil de analizar.