gpt4 book ai didi

c++ - 在 C++ 中通过递归打印数组

转载 作者:太空宇宙 更新时间:2023-11-03 10:31:16 25 4
gpt4 key购买 nike

我正在尝试编写一个函数来通过递归打印数组。

我写了三个函数,但从原理上看,它们似乎是一样的。

void printArray0( int theArray[], int theSize, int theIndex = 0 )
{
cout << theArray[theIndex] << ' ';
if ( ++theIndex != theSize ) printArray0( theArray, theSize, theIndex );
else cout << endl;
}

void printArray1( int theArray[], int theElementLeft )
{
cout << *theArray << ' ';
if ( theElementLeft != 1 ) printArray1( theArray+1, theElementLeft-1 );
else cout << endl;
}

void printArray2( int theArray[], int theSize )
{
static int myIndex = 0;
cout << theArray[myIndex] << ' ';
if ( ++myIndex != theSize ) printArray2( theArray, theSize );
else cout << endl;
}

那么它们之间有显着差异吗?

如果有,哪个函数最快,哪个最安全?

希望可以借鉴别人的经验:)

最佳答案

第三个不等同于前两个,因为它使用静态变量来保持当前状态。这是一件坏事(想象一下从多个线程同时运行这个函数,看看为什么)。这甚至起作用的原因是每次函数调用都不会超过一次递归调用。例如,试图在二叉树的递归遍历中保持静态状态会失败得很惨。这就是为什么当前状态应该通过参数传递给递归函数,而不使用静态或成员上下文。

前两个版本应该没有性能差异,因为它们的时间将主要由数据的输出决定。

我会像这样更改第二个函数的签名

void printArray1( int *theArray, int theElementLeft )

因为您从不将theArray 用作数组,而只是用作指针。从技术上讲,这无关紧要,因为无论如何数组都会“退化”为指针,但我认为这会略微提高可读性。

关于c++ - 在 C++ 中通过递归打印数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15928456/

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