使序列无法正常工作的递归函数

时间:2017-03-19 22:34:12

标签: c function if-statement recursion ansi-c

我正在尝试使用以下条件在C中编写序列x(n):

    x(0)=x
    x(n)=1 if x(n-1)=1
    x(n)=3*x(n-1)+1 if x(n-1)!=1 and x(n-1) not even
    x(n)=x(n-1)/2 if x(n-1) even

我尝试了以下内容:

  int sequence(int x, int n){

    if(n==0){
     return x;
    }


    if (sequence(x,n-1)==1){
     return 1;
    }

   if((sequence(x,n-1)!=1)&&((sequence(x,n-1)%2)!=0)){

      return 3*sequence(x,n-1)+1;

    }

    if((sequence(x,n-1)%2)==0){
     return sequence(x,n-1)/2;
    }


  }

它应该给出序列的第n个元素,起点为x。但是,它不起作用......

1 个答案:

答案 0 :(得分:-1)

您的代码符合您的建议。也许你原来的逻辑是有缺陷的。

f(x,0)=x
f(x,n)=1            if f(x,n-1)=1
f(x,n)=3*f(x,n-1)+1 if f(x,n-1)!=1 and f(x,n-1) not even
f(x,n)=f(x,n-1)/2   otherwise

您可以稍微清理一下代码,以提高其可读性并使其更快/更好。

int sequence(int x, int n){
  if(n==0){
    return x;
  }

  if (sequence(x,n-1)==1){
    return 1;
  }

  if((sequence(x,n-1)%2)!=0){
    return 3*sequence(x,n-1)+1;
  }

  return sequence(x,n-1)/2;
}