Mandelbrot C

时间:2015-04-29 17:12:50

标签: c algorithm recursion mandelbrot

我是编码的新手,我需要制作Mandelbrot功能。对于那些不了解的人来说,Mandelbrot集是一组复数。基本上,您从一个复数开始,然后将其平方并将其添加到原始复数。例如,如果我使用数字1,则该集合将为0,1,2,5,26 ......我从以下值获得此值:0,1,(1 ^ 2)+ 1 = 2,(2 ^ 2)+ 1 = 5,(5 ^ 2)+ 1 = 26。 现在,我的递归函数应该使用两个输入来找到这个集合的总和:数字n,这是我们进入集合的距离。例如,如果n是3,那么我的第一个例子就是(0,1,2)。第二个输入是一个复数结构,我已经将其定义为两个部分,一个虚数和一个实数。目标是将两个复数相乘并添加原始复数。我已经为复数添加了函数并添加了函数,所以基本上我只需要帮助递归部分。以下是我到目前为止的情况:

    #include <math.h>
    #include <stdio.h>
    complex_t mandelbrot(doublen, complex_t c) {
            if(n == 0) {
               return c; 
            }
            else {
               complex_t first = mandelbrot(n-1, c);
               complex_t multiplied;
               complex_t multiplied = multiply_complex(first, first);
               return mandelbrot(n-1, multiplied); 
               }

对于该程序,n将被设置为15,并且如果复数的实部的绝对值小于100,则它在mandelbrot集中。但是,这是在以后完成的;在这里,我只需要找出为什么我的递归过程没有正确处理。

1 个答案:

答案 0 :(得分:2)

由于某种原因,哟正在执行两次递归调用。但不执行添加部分。您的函数else部分应该与此类似:

complex_t first = mandelbrot(n-1, c);
return add_complex(c, multiply_complex(first, first));

<强>更新
n应该是整数,而不是double。在基础情况下,由于浮点舍入细节,完全相等的比较最不可能发生,因此您不希望在基本情况下将double与零比较终止。