• 打印N个数的循环算法和递归算法比较


    1.循环算法:

    1 void PrintN_1(int N)
    2 {
    3     int i;
    4     for (i = 0; i <= N; i++)
    5         printf("%d
    ", i);
    6     return;
    7 }

    N可以为任意数量级的整数

    2.递归算法:

    1 void PrintN_2(int N)
    2 {
    3     if (N)
    4     {
    5         PrintN_2(N - 1);
    6         printf("%d
    ", N);
    7     }
    8 }

    当N为10^4个数量级的时候程序就会非正常中断,要计算PrintN_2(N),因为这个函数里还有其他的语句,所以要先保存它的状态,然后进入下一次递归;而在执行PrintN_2(N -1)时,为了在程序最终返回是能执行它之后的语句,所以要先保存它的状态,然后进入下一次调用,……,直到执行到PrintN_2(0)时,函数才直接返回,然后逐级执行之前保存的状态中的其他语句,执行完之后释放内存。所以这个递归在N非常大时,经过展开后是非常庞大的,需要耗费大量的内存空间,当所需的内存空间超过堆栈的最大内存时,程序就会非正常中断,从而一个数也不打印。

    假设存储每个函数的转态占用C个单位的内存空间,那么执行PrintN_2(N)就需要C * N个单位的内存空间,这个算法的空间复杂度就是S(N) = C * N;

  • 相关阅读:
    D
    C
    如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的?
    二维数组中的查找
    简单对称算法
    冒泡排序(数组排序)
    二分查找
    斐波那契数列
    顺序查找(数组里查找某个元素)
    二维数组排序算法函数
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/9706281.html
Copyright © 2020-2023  润新知