gpt4 book ai didi

c - C 的 Mandelbrot 递归函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:58:01 26 4
gpt4 key购买 nike

我是编码新手,需要制作 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 集中。但是,这是稍后完成的;在这里,我只需要找出为什么我的递归过程没有正确处理。

最佳答案

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

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

更新:
n 应该是整数,而不是 double 。在基本情况下,您冒着不通过将 double 与零进行比较而终止的风险,因为由于浮点舍入细节,精确相等比较很可能不会起作用。

关于c - C 的 Mandelbrot 递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29950289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com