1 00:00:00,000 --> 00:00:03,110 >> COLUNA 1: Em que última versão sigma, eu implementei o que eu chamaria 2 00:00:03,110 --> 00:00:06,570 uma solução iterativa, em que eu usei um laço para a frente para contar toda a 3 00:00:06,570 --> 00:00:09,720 os números entre 1 e m, posteriormente retornando a soma. 4 00:00:09,720 --> 00:00:12,560 >> Mas acontece que nós podemos usar outro técnica para implementar esse mesmo 5 00:00:12,560 --> 00:00:15,120 função, uma técnica conhecido como recursão. 6 00:00:15,120 --> 00:00:19,360 Uma função recursiva, por assim dizer, é simplesmente aquele que chama a si mesmo. 7 00:00:19,360 --> 00:00:21,290 Agora, em si e por si, que pode ser um problema. 8 00:00:21,290 --> 00:00:24,500 Se uma função simplesmente chama a si mesmo que chama a si mesmo, que chama a si mesmo, 9 00:00:24,500 --> 00:00:26,080 esse processo pode bot nunca acabar. 10 00:00:26,080 --> 00:00:30,490 Mas enquanto nós incluímos uma chamada caso base, uma condição que garante 11 00:00:30,490 --> 00:00:34,930 que em algumas situações não chamamos nós, esse processo de outra forma 12 00:00:34,930 --> 00:00:37,070 infinito looping deve cessar. 13 00:00:37,070 --> 00:00:39,180 >> Vamos agora reimplementar sigma como se segue. 14 00:00:39,180 --> 00:00:43,810 Se n for menor ou igual a 0, Sou simplesmente, e um tanto arbitrariamente, 15 00:00:43,810 --> 00:00:45,670 vai retornar 0. 16 00:00:45,670 --> 00:00:49,370 Doutra maneira, que eu vou fazer é na verdade calcular sigma para o int positiva 17 00:00:49,370 --> 00:00:50,460 que eu tenha sido entregue. 18 00:00:50,460 --> 00:00:52,050 >> Agora, o que é sigma de m? 19 00:00:52,050 --> 00:00:55,480 Bem, sigma do m é, é claro, a soma de 1 através m. 20 00:00:55,480 --> 00:00:58,820 Mas se pensarmos sobre isso de outra maneira, é simplesmente a soma de m mais m 21 00:00:58,820 --> 00:01:02,560 menos 1 m, mais menos 2 e assim por diante, todo o caminho até a 1. 22 00:01:02,560 --> 00:01:08,080 Então, nesse sentido, parece que Eu poderia simplesmente devolver m plus. 23 00:01:08,080 --> 00:01:10,210 >> E então eu preciso m menos 1 m, mais menos 2. 24 00:01:10,210 --> 00:01:13,470 Mas eu tenho uma função que pode dar me precisamente a resposta, ou seja, 25 00:01:13,470 --> 00:01:16,340 sigma de m menos 1. 26 00:01:16,340 --> 00:01:19,670 >> Agora, me chamar dessa maneira não faz parece ser a melhor idéia. 27 00:01:19,670 --> 00:01:22,610 Porque se chama sigma sigma que chama sigma que chama sigma, você 28 00:01:22,610 --> 00:01:24,480 poderia pensar que este processo pode não terminar nunca. 29 00:01:24,480 --> 00:01:27,720 Mas é por isso que tivemos a chamada base de caso, na parte superior desta função. 30 00:01:27,720 --> 00:01:31,540 A condição if que verifica se m é menor ou igual a 0 não vou 31 00:01:31,540 --> 00:01:32,610 de me chamar. 32 00:01:32,610 --> 00:01:37,010 Estou em vez de ir para retornar 0, o que por sua vez, vai ser adicionado ao 33 00:01:37,010 --> 00:01:39,950 números anteriores, que eu fui somando -se, parando, assim, este 34 00:01:39,950 --> 00:01:41,740 processo de outro modo infinito. 35 00:01:41,740 --> 00:01:43,710 >> Vamos agora ver se esta nova implementação funciona. 36 00:01:43,710 --> 00:01:46,510 Vamos salvar, compilar e executar este programa. 37 00:01:46,510 --> 00:01:50,640 Faça sigma 1 ponto reduzir sigma 1. 38 00:01:50,640 --> 00:01:52,900 E vamos fornecê-lo com o mesmos números de antes. 39 00:01:52,900 --> 00:01:55,520 2, que deve espero dar-me 3. 40 00:01:55,520 --> 00:01:58,970 Vamos fornecer-lhe 3, que devem espero dar-me 6. 41 00:01:58,970 --> 00:02:03,480 E vamos, finalmente, fornecer-lhe 50, que na verdade me dá 1.275. 42 00:02:03,480 --> 00:02:06,130