我正在尝试用 c 编写一个项目,该项目显示一个名为 Sierpinski 分形的分形(其中节点由“#”表示)。所以一个 1-sierpinski 三角形看起来像:
##
#
2-谢尔宾斯基三角形
####
# #
##
#
等等...这里有一个链接可以找到它的样子: http: //fr.wikipedia.org/wiki /Triangle_de_Sierpiński
我被告知它可以在没有任何循环的情况下完成,只需通过递归方法即可。所以我尝试了类似的东西:
//extracting the power of two's index
int puiss_2(int N){
int i=0,j=1;
for(i=0;i<N;i++){
j=j*2;
i++;
}
return j;
}
//the recursive method
void fractal(int N)
{
int M;
M= puiss_2(N);
if(M==0){
printf("##\n");
printf("# ");
}
else{
fractal(N-1);
fractal(N-1);
printf("\n");
fractal(N-1);
printf(" ");
}
}
int main()
{
int N;
scanf("%d",&N);
fractal(N);
}
当然它不起作用,因为当我跳到一条线时,我无法反转它。所以当我调用它两次时:
分形(N-1);分形(N-1);
两个连续的动机并没有聚集在一起......有没有人知道如何做到这一点?或者我的算法设计完全错了?