Ricorsione C ++





рекурсия с++, Fibonacci C ++

In C ++ qualsiasi funzione tranne principale() Può definirsi. То есть в теле функции может быть размещен вызов этой же функции. Это называется рекурсией.

Когда программа выполняет код рекурсивной функции – avrebbe impiegato senza fine, se non si fornisce la condizione di uscita della ricorsione. Questo dovrebbe essere ricordato, per evitare il loop chiamate. Pertanto, nella definizione della funzione ricorsiva deve assolutamente indicare la condizione di uscita. per esempio, можно разместить её вызов внутри блока Se.

В этой программе функция recursionGoDown() chiamerà se stesso, пока в нее передается число больше нуля. ogni volta, la funzione ottiene il numero di, da cui è sottratto nell'unità firma. Appena la condizione diventa falsa (il numero sarà inferiore a zero) – chiamate per interrompere e avviare l'uscita del ricorsione.

Se passiamo in un numero di funzione 9, вызовов будет 10. Программа как бы углубляется на 10 livelli, l'esecuzione di ricorsione. Чтобы ей выйти из рекурсии, надо пройти эти десять уровней обратно. Poiché la linea di codice

Sarà effettuata troppo 10 tempo, но значение someNumber cambierà in ordine inverso. In primo luogo, esso corrisponderà al, что передалось в функцию на 10 уровне рекурсии, poi passato al fatto che 9 livello, ecc.

рекурсия с++, Fibonacci C ++

Voglio richiamare l'attenzione su un punto importante. Ogni chiamata ricorsiva crea una nuova variabile someNumber il nuovo valore. Эти переменные будут занимать какое-то место в оперативной памяти. Если вызовов 10, in questo esempio,, e sarà memorizzato 10 con diversi valori delle variabili. Можно дописать в программу вывод на экран адресов, che memorizza questi valori e vedere questo:

Passato al numero di funzione 2: recursionGoDown(2); Уровней рекурсии будет 3.

рекурсия с++, Fibonacci C ++

Come si può vedere, ogni variabile someNumber хранится в отдельном отрезке памяти. Durante l'uscita sul retro valori ricorsione sono presi dallo stesso indirizzo in ordine inverso.

Quasi ogni compito, che può essere risolto utilizzando la ricorsione, può essere implementato usando cicli di iterazione. Вы ведь легко можете показать на экран числа от 9 a 0 e 0 a 9 l'applicazione di cicli. Помимо этого следует знать, che la ricorsione richiede più memoria e di calcolo produrrà più lento, Cem iterazione.

ma, come sostenuto da programmatori esperti e molti autori di libri, Questo non significa, che la ricorsione è inutile. Ci sono compiti, decidere quale, Utilizzando cicli di iterazione, difficile e ingombrante. Una soluzione ricorsiva sembra migliore. Для начального уровня, fino a quando si impara solo basi della programmazione in C ++, hai solo bisogno di capire, Che ricorsione è e come funziona.

Guarda altri video su ricorsione 6′ (video autore: Denis Markov).

Newsletter nuove lezioni sulla programmazione:

Ricorsione C ++
4 (80%) 2 voti

4 pensieri su "Ricorsione C ++

  1. Вы слишком строги к рекурсии ;-)

    1. ricorsione – это общий математический аппарат, которым теоретически выражаются все вычислимые алгоритмы (это я взял из мат. теории алгоритмов).
    2. Все задачи над динамическими структурами данных (списки, очереди, деревья, графы, …) решаются рекурсивно проще, а главное нагляднее, чем итерационно (итерационные циклические алгоритмы лучше работают над массивамистатическими конструкциями).
    3. Есть алгоритмы, которые выражаются в 2-3 строчки рекурсивно, но которые крайне сложно выписать без рекурсии. Красивейший пример тому: знаменитая задача “Torre di Hanoi”. Многие алгоритмы сортировки (тех же массивов) лучше выражаются в рекурсивной форме.

    Рекурсия только кажется сложной, потому что ей не учат в отечественной практике и не умеют её применять. А в университетах Франции, per esempio, обучение 1-го семестра начинают с обучения рекурсивным алгоритмам.

    1. Всегда хорошо, когда кто-то высказывает свою точку зрения и свое личное мнение, основанное на опыте. Начинающим полезно будет почитать.

    2. Как вы предлагаете использовать рекурсию в списках и очередях?

      1. ricorsione – esso самый естественный способ обработки любых динамических структур (списков, деревьев и т.д.), это демонстрируют функциональные языки программирования, такие как Lisp. Такой подход намного эффективней, чем итерационный (циклами). Но это нужно показывать на примерах кода
        А простой и красивый пример рекурсии посмотрите в задаче возведения числа в степень: http://purecodecpp.com/archives/2734

Lascia un Commento

L'indirizzo email non verrà pubblicato. i campi richiesti sono contrassegnati *