我读了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));