递归关系:找到长度为7的位串在C中包含两个连续的0

时间:2015-12-06 05:45:22

标签: c recurrence

我有

的递归关系

enter image description here

并且首字母条件是

  

a0 = a1 = 0

有了这两个,我必须找到长度为7的位串包含两个连续的0,我已经解决了。

示例:

a2 = a2-1 + a2-2 + 22-2
= a1 + a0 + 20
= 0 + 0 + 1
= 1

依此类推,直到a7。

问题是如何将这些转换为c?

我不是很擅长c,但我会这样尝试。

#include<stdio.h>
#include <math.h>

int main()
{   
    int a[7];
    int total = 0;
    printf("the initial condition is a0 = a1 = 0\n\n");

//  a[0] = 0;
//  a[1] = 0;

    for (int i=2; i<=7; i++)
    {
        if(a[0] && a[1])
        a[i] = 0;
        else
        total = (a[i-1]) + (a[i-2]) + (2 * pow((i-2),i));
        printf("a%d = a(%d-1) + a(%d-2) + 2(%d-2)\n",i,i,i,i);
        printf("a%d = %d\n\n",i,total); 
    }   
}

输出与我计算的不一样pls help:(

3 个答案:

答案 0 :(得分:1)

int func (int n) 
{
    if (n==0 || n==1)
        return 0;
    if (n==2)
        return 1;
    return func(n-1) + func(n-2) + pow(2,(n-2));
}

#include<stdio.h>
#include <math.h>

int main()
{   
    return func(7);
}

答案 1 :(得分:0)

在pow()函数中,pow(x,y)= x ^ y(对双精度运算并返回double)。你的例子中的C代码因此做2.0 *(((double)i-2.0)^(double)i)...更简单的方法2 ^(i-2)(在整数数学中)是使用按位轮班操作:

total = a[i-1] + a[i-2] + (1 << i-2);

(注意:对于 ANSI C运算符优先级,请咨询您选择的互联网搜索引擎。)

如果你的目的是使函数能够支持浮点,那么pow()函数是合适的......但是变量的类型需要相应地改变。

对于整数数学,您可能希望考虑使用long或long long类型,以便减少类型中空间不足的风险。

答案 2 :(得分:0)

首先取消注释初始化2个第一个元素的行。然后在for循环中只需要2行:

a [i] = a [i-1] + a [i-2] + pow(2,i-2); 然后打印一个