Tópico - recursão

tópicos recursiva

A definição : a função chama-se direta ou indiretamente própria

meet recursiva três condições

  1. Recursivo deve ter uma condição de término definida

  2. O tamanho da função de processamento de dados deve ser decrementado

  3. Esta transformação é solucionável

Circulação ou recursão

  • recursão

    • Prontamente entendidas (aqui é entendido em termos do complexo após o conhecimento no que diz respeito à FIG, árvores, etc)
    • lento
    • O espaço de armazenamento
  • circulação

    • Difícil de entender
    • lento
    • espaço de armazenamento pequeno

funções de chamada

  • Ao chamar uma outra função durante a operação de uma função, antes de executar a função de chamada, o sistema precisa de três coisas:

    • Passa todos os parâmetros reais, endereço do remetente e outras informações para a função chamada é armazenado.

    • Para as variáveis ​​locais da função chamada (incluindo linhas de referência) alocado espaço de armazenamento.

    • Transfere o controle para a chamada de entrada de função.

  • Antes de ser retornado da função chamada de função, o sistema deve realizar três coisas:

    • Salve a função chamada retorna.
    • espaço de armazenamento gratuito ocupada pela função chamada.
    • De acordo com o endereço de retorno salvo das chamadas transferências função de controle para a função de chamada.
  • Quando existe uma pluralidade de chamadas de função para a outra, de acordo com "retorno para a primeira chamada" princípio, e a transmissão de informação entre a transferência de controlo funções tem que confiar na "pilha" é alcançado, isto é, o sistema vai ser obrigado a rodar toda os dados de grelha de programas no espaço uma pilha, sempre que uma função é chamada, é atribuído uma área de armazenamento no topo da pilha, execute impulso operação, sempre que uma função sai, ele libera sua área de armazenamento, fazer pop operações, funções atualmente em execução para sempre na posição de pilha.

  • A função e chamadas de função A B A função chama uma função no computador não parece ser diferente, mas com a nossa maneira diária de pensamento para entender mais bizarro!

  1. 1 + 2 + 3 + ... + n, e
int sum(int n)
{
   if(n==1)
   	return 1;
   else
  		return n+sum(n-1);
}
  1. fatorial
int jc(int n)
{
    if(n==1)
        return 1;
    else
        return n*jc(n-1);
}


  1. Fibonacci 11235813 ....
int fs(int day)
{
    if((day==1)||(day==2))
        return 1;
    else
        return fs(n-1)+fs(n-2);
}
  1. Torre de Hanói

Algoritmo Pseudo
Se apenas uma placa, directamente a partir da A -> C
, se n discos, n> 1, os n-1 primeiros movimentos de bandeja de A a B atrav de C
e, em seguida, transferida para a n-ésima de tabuleiro C
, em seguida, n- uma placa se move de B para A de C

//2020.4.7//0:20

#include<iostream>
using namespace std;

void hanoi(int, char, char, char);

int main()
{	
   //盘子个数以及编号(第一个就是1,最后一个就是n)
   int n;
   cout << "请输入盘子个数" << endl;
   cin >> n;

   //柱子编号(其实没有写的必要)
   char ch1 = 'A';
   char ch2 = 'B';
   char ch3 = 'C';
   
   hanoi(n, 'A', 'B', 'C');  //将n个盘子从A柱子借助中间柱子B转移到C
}

void hanoi(int n, char from, char depend, char to)//记住位置 第一个位置是初始塔,第二个是中转塔,第三个是目的塔
{
   if (n == 1)
   	cout << "编号为" << n << "的盘子从" << from << "————>" << to << endl;//一个就直接移好了
   else
   {
   	//把最下面第n个上面n-1个盘子全部从A借助C移动到B
   	hanoi(n - 1, from, to, depend);
   	//再把第n个盘子从A移至C
   	cout << "编号为" << n << "的盘子从" << from << "————>" << to << endl;
   	//再把n-1个盘子全部从B借助A移动至C
   	hanoi(n - 1, depend, from, to);
   }
}

  

Acho que você gosta

Origin www.cnblogs.com/yuuuuu422/p/12650845.html
Recomendado
Clasificación