如何找到由以下关系T(n+;2)=(Tn+;1)^2+;在C语言中,T(0)=0和T(1)=1

如何找到由以下关系T(n+;2)=(Tn+;1)^2+;在C语言中,T(0)=0和T(1)=1,c,algorithm,C,Algorithm,**********对于n您需要一个支持任意精度数字的库,如GMP,例如:递归解决方案: some_big_int_type T(int N) { if (N == 0) return 0; if (N == 1) return 1; some_big_int_type Tpow2 = T(N - 1); return Tpow2 * Tpow2 + T(N - 2); } big\u type\u int可以作

**********对于n您需要一个支持任意精度数字的库,如GMP,例如:

递归解决方案:

some_big_int_type T(int N) 
{       
    if (N == 0) 
        return 0;
    if (N == 1)
        return 1;
    some_big_int_type Tpow2 = T(N - 1);
    return Tpow2 * Tpow2 + T(N - 2);
}

big\u type\u int
可以作为Ctx答案
uint128\u t

用于64位机器上的gcc,如果128位足够:

typedef unsigned int uint128_t __attribute__((mode(TI)));

uint128_t T (int nr) {
     uint128_t t0=0,t1=1,t2,sum = 0;
     while (nr--) {
         t2 = t1*t1 + t0;
         t0 = t1;
         t1 = t2;
         sum += t2;
     }
     return sum;
}

是T(n+1)^2吗?另外,你的问题是什么还不清楚。是因为太大的价值吗?你有什么要计算的吗?@ Bathsheba,我是工程师:D,不含糊,因为语句没有意义,如果你EVAL(n+1)1,你需要考虑的最大值是什么?<代码> N>代码>如果128位就足够了,如果您的平台支持gcc和
uint128\t
,那么您可以尝试使用它。如果问题在于如何编写代码来查找您要查找的值,那么关系将为您提供递归实现的代码。如果问题是找到这个表达式的封闭形式,那么最好使用math.SE.
Tpow2*Tpow2-T(N-2)+T(N-2)(+和分号)。这就是T(N),不是T(0)+。。。T(N)@mikedu95我什么都没得到?!在包含返回的行中,在Tpow2*Tpow2和T(N-2)之间,它应该是+而不是-。你错过了那行末尾的分号。此外,这计算出T(N),这不是本文的目标。要计算的值为T(0)+T(1)+…+对于给定的N,T(N)。关于-,以及关于
sum+=t2
:)@mikedu95 Argh,fixed;)之后的simicolonsemicolon,您是对的@Danh内置类型(如果可用)是
\uu uint128\u t
,因此这不会影响使用64位数学正确计算
t(0)。。。T(8)
。使用非标准的
uint128\u t
将范围扩展1到
t(0)。。。T(9)
@chux这并不奇怪,因为将一个数字移到平方大约会使其表示所需的位数翻倍。@egur等人:GMP就是答案。链接是关于GMP的更多信息-你希望作者做什么,包括GMP的源代码?