zoukankan      html  css  js  c++  java
  • 用递归解决问题

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




  • 相关阅读:
    Django model 常用方法记录
    程序员的注意事项
    硬件天使的使用
    你是否应该成为一名全栈工程师?
    web技术
    6个处理上面代码异味的重构方法(手法)
    git 命定
    ie console报错
    apache 省略index.php访问
    myisam和innodb的区别
  • 原文地址:https://www.cnblogs.com/mushishi/p/3211066.html
Copyright © 2011-2022 走看看