Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.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 具有递归函数的中国环_C_Recursion - Fatal编程技术网

C 具有递归函数的中国环

C 具有递归函数的中国环,c,recursion,C,Recursion,我想听听你对我的解决方案的意见 我必须实现一个递归函数来实现中国戒指游戏。这个游戏包括戴上n个戒指,这些戒指一开始是不戴的。这些环使用表格(大小=n)表示。最初,所有表格单元格=0,最终状态-->所有表格单元格=1。练习建议使用如下定义的“中文”函数编写递归解决方案: chinese (t, k, b) { if (b) replace(t,k) else remove(t,k) } 已知“replace”和“remove”函数是相互递归的。“repl

我想听听你对我的解决方案的意见

我必须实现一个递归函数来实现中国戒指游戏。这个游戏包括戴上n个戒指,这些戒指一开始是不戴的。这些环使用表格(大小=n)表示。最初,所有表格单元格=0,最终状态-->所有表格单元格=1。练习建议使用如下定义的“中文”函数编写递归解决方案:

chinese (t, k, b)
 {
   if (b) 
      replace(t,k)
   else
      remove(t,k)
 }
已知“replace”和“remove”函数是相互递归的。“replace”将打开(t[i]=1)1..k中的所有单元格,“remove”将关闭(t[i]=0)中的所有单元格。因此,我建议的解决办法如下:

void main ()
 {
   int b=1;
   chinese (t, n, 1);
 }
对于该功能,请更换并拆下:

void replace(int n)
 {
   if (n > 0) // Do nothing for 0 or fewer rings.
    {
    replace(n-1);
    remove(n-2);
    printf("put on ring %d",n);
    replace(n-2);
    }
  }


void remove(int n)
 {
   if (n > 0)  // Do nothing for 0 or fewer rings.
    {
      remove(n-2);
      printf("Take off ring %d",n);
      replace(n-2);
      remove(n-1);
    }
  }

那么你觉得我提出的解决方案怎么样?非常感谢

马上在main做几件事

 int main(void)
 {
    int b=1; // b is never used
    chinese (t, n, 1); // undefinef t and n
 }

有多少论点?你一开始有两个;1之后。@pmg表(t)和它的大小(n)假设您的代码按您希望的方式工作,这将更适合。您的中国戒指游戏是这样的吗?你戴上n个戒指是什么意思?关于:
voidmain()
(除了在flakyvisualstudio中)这不会编译。
main()
只有两个有效签名:
intmain(void)
intmain(intargc,char*argv[])
注意它们都有一个返回类型
int
,而不是
void
intmain(void){intb=1;int*t;intn;chinese(t,n,b);}可以吗?