Buongiorno a tutti,
ho programmato poco con le funzioni ricorsive, perciò ora mi trovo a sbattere il muso contro un algoritmo che alcuni potrebbero trovare banale. Quindi perchè non chiedere alla fantastica comunità di HTML?
Allora, tanto per inquadrare il linguaggio di programmazione, sto parlando di Javascript, ma questo può essere utile per le inizializzazioni delle variabili, perchè per il resto è un algoritmo che può essere espresso in qualsiasi linguaggio e voi fatelo pure. Ecco il problema:
Ho un numero di cifre non fissato che variano in un range non fissato e voglio che la loro somma dia un numero che decido. Voglio trovare quante combinazioni sommate diano il numero che decido. Es.
3 cifre
ogni cifra può variare tra 2 e 8 con uno step di 2 (2,4,6,8)
La somma delle tre cifre deve dare 12. Ci sono 10 combinazioni delle tre cifre che danno come somma 12.
Ecco quello che ho tirato fuori io, ma vi anticipo che è sbagliato. Suggerimenti, alternative?

//Inizializzazione script
var cifra = new Array();
//result : numero di combinazioni
var result = 0;
//ncifre : numero di cifre da combinare
var ncifre = 3;
//max_number : massimo valore che può acquisire una cifra
var max_number = 8;
//min_number : minimo valore che può acquisire una cifra
var min_number = 2;
//step_medias : ogni quanto aumenta una cifra tra due controlli di combinazioni
step_medias = 2;
//media_points : media delle cifre
var media_points = 4;
var w = 0;
for(w=0;w<ncifre;w++)
{
//cifra.push(min_number);
cifra.push(min_number - step_medias);
}
//Funzione che richiama la funzione ricorsiva
function clickclick()
{
for(w = 0;w < ncifre;w++)
{
//cifra.push(min_number);
cifra[w] = min_number - step_medias;
}
result = 0;
onCl(0);
}
//funzione ricorsiva
function onCl(i)
{
var j;
for(j =cifra[i];j < max_number; j+=step_medias)
{
var sum =0;
cifra[i] += step_medias;
if (i< (ncifre-1))
onCl(i+1);
else
{
for(k=0;k<ncifre;k++)
{
sum += cifra[k];
}
if(sum == (ncifre*media_points) )
result++;
}

}
cifra[i] = min_number;

if(i==0)
{
//document.result_calcolo.value = result;
alert(result);
}
return;
}

Grazie a tutti quelli che han letto fin qui