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);
}
页: 1 [2] 3 4 5
查看完整版本: C/C++,打印整数1到1000,不使用循环,条件语言