用递归解决问题

/*
* 大递归思路:
* 1)调度器必须完整地处理最简单的情况,而无需再调用迭代函数;
* 2)当调度器调用迭代函数时,必须向它传递问题的更简单版本
*
*
* 递归的对比:
* 1) 概念复杂性
* 2) 性能: 函数调用会带来显著的开销;
* 3) 控件需求: 递归将形成一个长长的函数调用链,依次等待其他调用的完成;
*        每个还没有结束的函数调用都会占用系统堆栈的空间;
*
* !!在递归和迭代做出决定的最基本规则是:在上面这些反对意见不成立时才选择递归
*
* 注意:1) 避免过多的参数(使用头递归,尽量避免尾递归)
*       2) 避免全局变量
*
*

*/

 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             int[] integer = { 100, 101, 102, 103, 104 };
 6             int[] number = { 1,2,3,0,8,9,0};
 7 
 8             Console.WriteLine("this is the sum by interation: sum=" + arraySumInteration(integer, 5));
 9             Console.WriteLine("this is the sum by recursion: sum=" + arraySumRecursive(integer, 5));
10 
11             Console.WriteLine("this is the zeroCount by recursion count=" + zeroCountRecursion(number, 7));
12             Console.ReadKey();
13 
14         }
15 
16 
17         //迭代函数
18         static int arraySumInteration(int[] integers, int size)
19         {
20             int sum = 0;
21             for (int i = 0; i < size; i++)
22             {
23                 sum += integers[i];
24             }
25             return sum;
26         }
27 
28 
29         //用递归代替迭代 (头递归)  尽量避免尾递归
30         //根据迭代函数期望接收的参数列表来编写递归函数的参数列表
31         static int arraySumRecursive(int[] integers, int size)
32         {
33             if (size == 0) return 0;
34             int lastNumber = integers[size - 1];
35             int allButLastSum = arraySumRecursive(integers, size - 1);
36             return lastNumber + allButLastSum;
37         }
38 
39 
40         //值为0的个数
41         static int zeroCountRecursion(int[] numbers, int size)
42         {
43             if (size == 0) return 0;
44             int count = zeroCountRecursion(numbers, size - 1);
45             if (numbers[size - 1] == 0) count++;
46             return count;
47         }
48 
49     }




原文地址:https://www.cnblogs.com/mushishi/p/3211066.html