• 用递归解决问题


    /*
    * 大递归思路:
    * 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     }




  • 相关阅读:
    记下mongoose(转载)
    vue vue-cli中引入全局less变量的方式
    单标签不支持 伪元素
    删除tppabs,href="javascript:if(confirm)...",、/*tpa=http://...
    系统字体放大导致rem布局错乱,解决方案,已通过测试
    IE条件注释
    hbase部署经验与坑总结
    ubuntu安装mysql 5.7
    静态代理和动态代理
    单例模式
  • 原文地址:https://www.cnblogs.com/mushishi/p/3211066.html
Copyright © 2020-2023  润新知