我有
的递归关系并且首字母条件是
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:(
答案 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); 然后打印一个