我是编码的新手,我需要制作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集中。但是,这是在以后完成的;在这里,我只需要找出为什么我的递归过程没有正确处理。
答案 0 :(得分:2)
else
部分应该与此类似:
complex_t first = mandelbrot(n-1, c);
return add_complex(c, multiply_complex(first, first));
<强>更新强>:
n
应该是整数,而不是double。在基础情况下,由于浮点舍入细节,完全相等的比较最不可能发生,因此您不希望在基本情况下将double与零比较终止。