wayne
发表于 2011-7-13 18:20:51
三目运算符其实 有判断的功能,除此之外还有方法吗
wayne
发表于 2011-7-13 18:36:42
可以试试用static
#include <iostream>
using namespace std;
class Printer
{
public:
Printer() { static unsigned i=1; cout << i++ << endl; }
};
int main()
{
Printer p;
}
wayne
发表于 2011-7-13 18:41:34
还有至少两种思路
xbtianlang
发表于 2011-7-13 18:43:06
#include
int foo(int n){
printf("%d\n",n>1?foo(n-1):1);
return n+1;
}
int main()
{
foo(1000);
}
mathe 发表于 2011-7-13 18:08 http://bbs.emath.ac.cn/images/common/back.gif
很好!
#include
int foo(int n){
printf("%d\n",n? foo(n-1): 1);
return n+2;
}
int main()
{
foo(999);
}
不知道为什么可以少递归1次?
mathe
发表于 2011-7-13 18:43:16
那个宏方法行数不会超标的,主要宏只需要定义10个(也就是10行)
另外我们还可以通过定义
#define P2(x) P(x); P(x+1)
#define P10(x) P2(x); P2(x+2); P2(x+4); P2(x+6); P2(x+8)
等方法进一步减少行数目。
如果不使用三目运算,还可以使用C异常,如
int foo(int n){
printf("%d\n",n);
foo(n+1+1/(1000-n));
}
int main()
{
try{
foo(1);
}catch(...){}
}
xbtianlang
发表于 2011-7-13 18:45:08
本帖最后由 xbtianlang 于 2011-7-13 18:46 编辑
呵呵,递归次数是一样的。
wayne
发表于 2011-7-13 18:45:31
10# mathe
好像没有997,:Q:,还得改改#include<stdio.h>
#define P(x) printf("%d\t",x)
#define P2(x) P(x);P(x+1)
#define P4(x) P2(x);P2(x+2)
#define P8(x) P4(x);P4(x+4)
#define P16(x) P8(x);P8(x+8)
#define P32(x) P16(x);P16(x+16)
#define P64(x) P32(x);P32(x+32)
#define P128(x) P64(x);P64(x+64)
#define P256(x) P128(x);P128(x+128)
#define P512(x) P256(x);P256(x+256)
int main()
{
P512(1);
P256(513);
P128(769);
P64(897);
P32(961);
P4(993);
P2(998);
}
mathe
发表于 2011-7-13 18:48:31
那就数错了:)弄一个更加容易实现的版本
#define P printf("%d\n",x++)
#define P2 P;P
#define P10 P2;P2;P2;P2;P2
#define P20 P10;P10
#define P100 P20;P20;P20;P20;P20
#define P200 P100;P100
#define P1000 P200;P200;P200;P200;P200
int main()
{
int x=1;
P1000;
}
wayne
发表于 2011-7-13 18:51:52
18# mathe
mathe好狡猾
实质是2楼的思路
mathe
发表于 2011-7-13 18:53:30
C++还可以使用STL,不过实际内部使用了循环
#include<algorithm>
#include <iostream>
using namespace std;
int a;
struct MyFun : public unary_function<int, void> {
void operator()(int& x)
{
cout<<x-a<<endl;
}
};
int main()
{
MyFun f;
for_each(a,a+1000,f);
}