Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不带连续1'的位字符串;s、 使用自顶向下的DP_C++_Dynamic Programming_Bitstring - Fatal编程技术网

C++ 不带连续1'的位字符串;s、 使用自顶向下的DP

C++ 不带连续1'的位字符串;s、 使用自顶向下的DP,c++,dynamic-programming,bitstring,C++,Dynamic Programming,Bitstring,我试图将自下而上的动态规划方法(在链接中提到)转换为递归关系,但无法获得正确的输出 #include<iostream> #define n 4 using namespace std; int bitstring(int N, int b = 0) { static int s = 0; //termination condition if (N == 1) return 1; if(b == 1) { s

我试图将自下而上的动态规划方法(在链接中提到)转换为递归关系,但无法获得正确的输出

#include<iostream>
#define n 4
using namespace std;


int bitstring(int N, int b = 0)
{
    static int s = 0;
    //termination condition
    if (N == 1)
        return 1;
    if(b == 1)
    {
        s += bitstring(N - 1, 0);
    }
    if (b == 0)
    {
        s = bitstring(N - 1, 0) + bitstring(N - 1, 1);
    }
    return s;
}

int main()
{
    cout << bitstring(n) << endl;
    return 0;
}

至少对于case
N==1
有两个序列[0]和[1]。 也许最好从角落的案子开始^_^
对于
b==1
b==0
的情况,您对
s
使用不同的操作,是不是应该是这样的?

首先,在
s=bitstring(N-1,0)+bitstring(N-1,1)
中函数调用的顺序是未指定的,因此可以首先进行递归调用。@1201programalm,总是
bitstring(N-1,0)
首先执行,然后只调用
位字符串(N-1,1)
。我已经在调试器上检查了相同的设置。这次您可能有正确的顺序,但是不同的编译器(或不同的优化设置)可能会导致顺序更改。另一个问题是静态
s
变量的赋值(仔细想想)。这并不能回答这个问题。一旦你有足够的钱,你将能够;相反,提供不需要询问者澄清的信息。
                f(3,0)        f(3,1)
                /     \          |
            f(2,0)  f(2,1)     f(2,0)
            /   \      |       /     \
        f(1,0) f(1,1) f(1,1)  f(1,0)  f(1,1)
          |      |       |      |        |
          1      1       1      1        1