gpt4 book ai didi

c++ - 如何跟踪递归函数调用堆栈的使用情况

转载 作者:行者123 更新时间:2023-11-28 00:05:38 25 4
gpt4 key购买 nike

我正在教一门介绍 C++ 学生的类(class),我想设计一个实验室来展示递归函数与迭代有何不同。我的想法是跟踪两者的内存/调用堆栈使用情况并显示差异。我几乎肯定我在攻读学位时做过类似的事情,但不记得了。我的经验不在于 C/C++,因此我们将不胜感激。

更新 1:

我相信我可能错过了代表我的任务。我曾希望找到一种方法来展示与迭代相比,递归如何增加开销/堆栈。我遵循了一些建议的链接并提出了以下脚本。

loops=100
counter=0
total1=0
echo "Iteration"
while [ $counter -lt $loops ]; do
"$1" & # Run the given command line in the background.
pid=$! peak1=0
echo -e "$counter.\c"
while true; do
#sleep 0.1
sample="$(pmap $pid | tail -n1 | sed 's/[^0-9]*//g' 2> /dev/null)" || break

if [ -z "$sample" ]; then
break
fi
let peak1='sample > peak1 ? sample : peak1'
done
# echo "Peak: $peak1" 1>&2
total1=$(expr $total1 + $peak1)
counter=$[$counter+1]
done

该程序通过迭代或递归实现二分搜索。这个想法是获取平均内存使用并将其与同一程序的递归版本进行比较。这是行不通的,因为迭代版本通常比递归具有更大的平均内存,这并没有向我的学生表明递归有缺点。因此,我很确定我做错了什么。

pmap 不会提供我想要的东西吗?

最佳答案

我觉得是这样的

void recursive(int* ptop) {
int dummy = 0;
printf("stack size %d\n",&dummy - ptop);
recursive(ptop);
}

void start() {
int dummy = 0;
recursive(&dummy);
}

直到它崩溃。

关于c++ - 如何跟踪递归函数调用堆栈的使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35809128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com