把递归阶乘改成循环

补全 fact_loop:用循环算阶乘,不许递归。算 5 的阶乘。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

把递归斐波那契改成循环

补全 fib_loop:用循环算第 n 个斐波那契数。循环版没有重复计算——这正是它比朴素递归快的原因。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

结果一样栈深却差五倍

递归版已经写好。补全循环版 fact_loop(也要记下深度),程序会把三样东西用 / 拼起来输出:两个结果是否相等、递归版的最大深度、循环版的最大深度。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

每层递归占的是什么

第 1 步:这一排格子就是整个调用栈 第 2 步:一层递归压一个栈帧 第 3 步:一层递归压一个栈帧 第 4 步:一层递归压一个栈帧 第 5 步:一层递归压一个栈帧 第 6 步:还要往下:栈满了 第 7 步:程序段错误崩溃 每调用一层函数,

开始练习 →

递归一千万层会怎样

在 C++ 里让一个递归往下走一千万层,通常会【0】。

开始练习 →

怎么救一个太深的递归

一个递归深度可能到百万层,最稳妥的办法是【0】。

开始练习 →

五万层递归也能跑完

每层栈帧很小时,几万层递归还放得下。运行下面这段程序: #include <algorithm> #include <iostream> #include <numeric> #include <s

开始练习 →

自己拿个栈算阶乘

下面用 vector 当栈,模拟阶乘递归的「往下压、往回乘」。运行下面这段程序: #include <algorithm> #include <iostream> #include <numeric> #

开始练习 →

一千万层的求和改成循环

下面的 sum_to 用递归求 1 + 2 + … + n。n = 一千万时,原样运行会把栈压爆(段错误)。把它改成循环累加,输出结果。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

大数组搬到函数外面

下面在 main 里开了一个 400 万个 int 的局部数组(约 16 MB),原样运行会因为栈放不下而崩溃。把数组挪到函数外面(全局变量不占栈),输出所有元素之和。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →