我正在攻读数据结构考试。通过前几年的一些考试,我遇到了一个关于为以下代码的运行时间找到表达式的问题:
void func(int n) {
if(n<=1)
return;
cout << "some string" << endl;
int x = func(n/2);
cout << "some other string" << endl;
int y = func(n/4) + func(n/4);
for(int i=0; i<2*n; i++)
cout << i << " x+y+i = " << x+y+i << endl;
return;
}
函数的名称,变量名称,字符串等都会更改,但其余部分不会更改。
是否有任何特殊情况,上面的代码甚至会编译? 我自己在一个在线视觉C ++编译器上检查了它并得到了关于将void视为int的预期错误...我仍然非常困惑这种基本错误是如何在CS考试中出现的。我更倾向于相信有一些我不熟悉的情况,其中上述语法是有意义的......无论是在C / C ++还是其他地方。
答案 0 :(得分:1)
如图所示,代码毫无意义。它依赖于func
的返回值,但func
不返回任何内容(它是无效的)。
你可以有两个不同的函数func
,但需要有一些东西可以区分它们。第一种方法是,如果他们采用不同的参数类型:
void func(int);
int func(double);
这似乎不是这种情况,因为您总是使用int
进行通话。
第二个是如果它们在不同的命名空间中,或者如果一个是类成员而另一个不是。在这种情况下,您需要添加一些语法。
int x = other::func(n/2); // to use the namespace "other"
int x = ::func(n/2); // to use a global