English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Analisi di un esempio di operazione ricorsiva in JavaScript

Questo esempio analizza l'operazione ricorsiva in JavaScript. Condivido con tutti per riferimento, come segue:

Problema

Un semplice ricorsione, per calcolare il factorial di n:

function factorial(n){
  if (n<=1)
  {
    return 1;
  else{
    return factorial(n-1)*n;
  }
}

Se viene utilizzato come nel seguente esempio, si verificherà un errore:

var fcopy = factorial;
factorial = null;
alert(fcopy(3));

Poiché la funzione reale a cui puntano fcopy ha chiamato factorial, che è stato già rilasciato.

La soluzione

Utilizzare arguments.callee

Quando l'esecuzione entra nella funzione viene creato l'ambiente di esecuzione della funzione (catena di scope, ecc.), inclusi l'oggetto speciale arguments, che ha una proprietà che punta alla funzione stessa: arguments.callee.

function factorial(n){
  if (n<=1)
  {
    return 1;
  else{
    return arguments.callee(n-1)*n;
  }
}

Ma callee non è disponibile nel modo stricto.

Espressione di funzione

var factorial = (function f(n){
  if (n<=1)
  {
    return 1;
  else{
    return f(n-1)*n;
  }
)

Questo non utilizza nuove tecnologie, ma è solo un'applicazione di un concetto esistente, quando si definisce factorial, si crea direttamente una funzione e si assegna il riferimento a questa funzione a factorial.

Chi è interessato a ulteriori contenuti su JavaScript può consultare le sezioni speciali di questo sito: 'Concetti di algoritmo e tecniche di esplorazione JavaScript', 'Tecniche di manipolazione degli array JavaScript', 'Utilizzo delle operazioni matematiche JavaScript', 'Strutture dati e tecniche di algoritmo JavaScript', 'Esempi di animazione JavaScript e tecniche', 'Tecniche di ricerca JavaScript', 'Tecniche di animazione JavaScript e tecniche' e 'Tecniche di debug e gestione degli errori JavaScript'.

Spero che il contenuto di questo articolo possa essere utile per la progettazione di programmi JavaScript di tutti.

Dichiarazione: il contenuto di questo articolo è stato prelevato da Internet, è di proprietà del rispettivo autore, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene il diritto di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, questo sito rimuoverà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare