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![]()