【发布时间】:2012-10-02 13:54:07
【问题描述】:
我正在尝试用 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);
两个连续的动机并没有聚集在一起......有没有人知道如何 做那个?或者我的算法设计完全错了?
【问题讨论】:
-
谷歌谢尔宾斯基三角形了解它的实际外观。
-
您需要递归地执行此操作吗?如果您没有现成的代码可以迭代地执行此操作:rosettacode.org/wiki/Sierpinski_triangle
-
@Mike :是的,我想递归地这样做
-
@JimBalter,是的,我要编辑我的帖子
-
这里(作为第一个答案)是 Java 中的递归解决方案:stackoverflow.com/questions/8448908/…