【发布时间】:2010-12-23 03:52:05
【问题描述】:
我正在发明需要分析 C++ 代码的面试问题,这些代码使用指针和递归来做一些简单的事情。我尝试以递归方式写strcat():
size_t mystrlen( const char* str )
{
if( *str == 0 ) {
return 0;
}
return 1 + mystrlen( str + 1 );
}
void mystrcpy( char* to, const char* from )
{
if( ( *to = *from ) == 0 ) {
return;
}
mystrcpy( to + 1, from + 1 );
}
void mystrcat( char* to, const char* from )
{
mystrcpy( to + mystrlen( to ), from );
}
我不喜欢这里的是我有三个函数,而我的 strcat() 不是很递归 - 它只调用其他两个函数一次。有没有办法以某种方式重写它以减少函数的数量,增加递归的使用,但又不牺牲代码的简洁性?
【问题讨论】:
-
我认为这没有多大意义。也许你最好找到一个可以用递归解决的真正问题(很简单)并去做。此外,正确编写递归通常比阅读递归更难。树及其上的任何操作通常都是很好的候选者。在一次采访中,有人问我如何实现存储整数的树(结构),然后进行一些操作,例如“返回所有值的总和”、“返回从根开始计数的 N 级所有值的总和”。 ..
-
您的
mstrlen()和mstrcpy()将导致...堆栈溢出...如果提供任何可观大小的数据... -
(当然,除非你得到了尾递归优化的祝福……)
-
也许这个问题的想法是,任何在问题结束时身体没有不适的候选人,都没有 C 编程的实际经验;-)
-
如果我被问到这样的问题,我会跑路的:o)