题目:如何打印数字1-到n,限制条件是不用循环实现(即实现中不用for,while等循环语句)
首先你想到的是用递归函数实现:
void print2n(int n)
{
if (n > 1) {
print2n(n-1);
}
printf("%d\n", n);
}
写递归函数的优点是代码简洁,但思路一定要清晰。就是这个看似很简单的小问题笔者面试的数十人中还是有好多人回答不上来,哪怕最后明确告诉他就用递归来实现。写递归函数第一要点是递归的退出条件,退出处理不当的话很容易导致程序出错,最坏的情况是死循环。死循环会有什么结果?这个。。。你懂得。针对本题面试官可能还有不同的问题在后面等着你,比如,如何逆序打印n到1?
递归是编程中必须要掌握的一环,本博客后面将会有详细探讨。
如果面试官比较挑剔,继续追问:如果也不用递归呢?
如果你熟悉面线对象,知道引用计数的概念,那就难不倒你了:
#include <iostream>
using namespace std;
class A {
public:
A() {
cout <<counter++ <<endl;
}
protected:
static int counter;
};
int A::counter = 1;
int main()
{
A a[10];
return 0;
}