递归画图形A

递归绘制图形A题目描述图形描述思路代码C++版代码Java版题目描述对于给定的数字N,绘制图形A图形描述1.当N=1时,绘制的A2.当N=2时,绘制的A2.当N=3时,绘制的A思路我们发现当N=2时,第二个图形其实是由8个单独的A组成的。当N=3时,第3个图形其实是由8个图像二组成的。之后的过程可以递归得到。那么我们可以推出f[i]=8*f[i-1],我们就可以使用递归来...
摘要由CSDN通过智能技术生成

题目描述

对于给定的数字N,绘制图形A

图形描述

1.当N=1时,绘制的A
N=1
2.当N=2时,绘制的A
N=2
2.当N=3时,绘制的A
N=3

思路

我们发现当N=2时,第二个图形其实是由8个单独的A组成的。
当N=3时,第3个图形其实是由8个图像二组成的。之后的过程可以递归得到。
那么我们可以推出f[i]=8*f[i-1],我们就可以使用递归来绘制这个图形。我们可以使用一个二维数组来表示这个图形,那么唯一的问题是怎么填充整个二维数组。
核心问题是:
度数为N的图形G(n)可以由以下递归式子表示:
规律
设递归函数void draw(int n,int x,int y)表示在(x,y)位置开始设置度数为n的图形,它由8个度数为n-1的图形组成,其起始位置从上到下,从左到右分别为:(x,y)、(x+1,y-1)、(x+1,y+1)、(x+2,y-2)、(x+2,y+2)、(x+3,y-3)、(x+3,y+3)、(x+4,y-4)、(x+4,y+4)。

c++版代码中的坐标系和Java版定义不同,注意区别

代码C++版

#include <iostream>
#include <cmath>
using namespace std;
void paint(char **out, int c, int ybegin, int xbegin)
{
   
    if (c == 1)
    {
   
        out[ybegin][xbegin] = 'A';
    }
    else
    {
   
        int curBlankY = (int)pow(4, c - 2);
        int curBlankX = curBlankY;
        paint(out, c - 1, ybegin, xbegin + 3 * curBlankX);
        paint(out, c - 1, ybegin + curBlankY, xbegin + 2 * curBlankX);
        paint(out, c - 1, ybegin + curBlankY, xbegin + 4 * curBlankX);
        paint(out, c - 1, ybegin + curBlankY * 2, xbegin + 1 * curBlankX);
        paint(out, c - 1, ybegin + curBlankY * 2, xbegin + 3 * curBlankX);
        paint(out, c - 1, ybegin + curBlankY * 2, xbe
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值