我读了C语言中加泰罗尼亚数字算法的代码,发现这个短语我不太明白这里(递归地):

typedef unsigned long long ull;

ull catalan2(int n) {
int i;
ull r = !n;

for (i = 0; i < n; i++)
    r += catalan2(i) * catalan2(n - 1 - i);
return r;
}

有人能告诉妈妈这个短语吗
R=!n个
对这里负责吗?
提前谢谢你!

最佳答案

这:

ull r = !n;

相当于:
ull r;
if (n == 0)
    r = 1;
else
    r = 0;

一个不需要分支的复杂方法:
#include <limits.h>
...
ull r = 1-((unsigned)(n|(-n))>>(sizeof(n)*CHAR_BIT-1));

10-02 05:35