我正在尝试使用以下条件在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。但是,它不起作用......
答案 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;
}