Flexible C++

C++是一門非常靈活的語言,只要充分發揮你的想象, 再普通的東西都能玩出新花樣

1、1~1000求和
循環?遞歸?再簡單不過的題目了。但是如果不允許你用判斷語句呢?
如果你熟悉switch的內部實現,那麼你很容易想到使用函數指針數組。

#include <cstdio>

typedef int (*fun)(int);

int f1(int i) {return 0;}
int f2(int i) {fun f[2]={f1,f2}; return i+f[!!i](i-1);}
int main()
{
    printf("%d/n",f2(1000));
}

2、輸出1,2,...,100,99,...,2,1
如果同樣不讓你用判斷語句呢?你仍然可以使用函數指針數組:

#include <cstdio>

typedef void (*fun)(int i,int n);

void f1(int i,int n);
void f2(int i,int n);
void f3(int i,int n);

void f1(int i,int n)
{
    fun f[2]={f1,f2};

    printf("%d/n",i);
    f[i+1==n](i+1,n);
}
void f2(int i,int n)
{
    fun f[2]={f2,f3};

    printf("%d/n",i);
    f[i==1](i-1,n);
}
void f3(int i,int n) {}

int main()
{
    f1(1,100);
}

不過我們有更簡潔的方法。
短路算法和逗號表達式粉墨登場了,一行搞定~

#include <cstdio>

void f(int i,int n)
{
    printf("%d/n",i),(i<n)&&(f(i+1,n),printf("%d/n",i));
}

int main()
{
    f(1,100);
}
發佈了40 篇原創文章 · 獲贊 5 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章