递归法画*图?

lord_is_layuping 2010-10-26 01:50:02
来看看这个算法,
题目要求是:
要求用递归法

第1行1颗*
第2行2颗*
。。。
第n行n颗*
第n+1行n颗*
。。。
第2n行1颗*

我想问问这个怎么想的啊,那个p是起什么作用,有人精通这个吗?



看得我晕死了,谁接受一下吗

public class Test{
static int n = 3;
static int p = 0;
public static void main(String[] args) {
long count = fun(n);
System.out.println();
System.out.println("Count:" + count);
}

private static long fun(int _n){
if(_n==2){
printStar(p+1);
printStar(p+2);
printStar(p+2);
printStar(p+1);
return 6;
}
long count = 0;
if(_n>1){
p++;
printStar(p);
long tmp = fun(_n-1);
count = tmp + 2*_n;
printStar(p);
p--;
}
return count;
}

private static void printStar(int k){
for(int i=0; i<k; i++)
System.out.print('*');
System.out.println();
}
}


另外再出个类似题目,也是用递归法,画出下面的图:

*
**
*
****
*
**
*
********
*
**
*
****
*
**
*


...全文
143 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzc52151 2010-10-26
  • 打赏
  • 举报
回复

#include "stdio.h"

void fun(int n,int t){
int i,j;i=j=0;
if(n==1) return;
fun(n/2,t);
while(i++<t)printf(" ");
while(j++<n/2)printf("*");
printf("\n");
fun(n/2,n/4+t);
return;

}

int main(void){
fun(16,0);
return 0;
}
lord_is_layuping 2010-10-26
  • 打赏
  • 举报
回复
谢谢弟弟,乔丹大叔
darlingdd 2010-10-26
  • 打赏
  • 举报
回复
姐,我来顶你了,呵呵。
看我的,嘻嘻

package 数据结构和算法.算法.排序.递归;

/**
* @author DarlingDD
*
*/
public class 星号图
{

/**
* @param args
*/
public static void main(String[] args)
{
printGrap(0,8);

}


private static void printGrap(int spaceNumber,int starNumber)
{

if(starNumber==2)
{
printALine(spaceNumber,1);
printALine(spaceNumber,2);
printALine(spaceNumber+2/2,1);
}
if(starNumber>2)
{
printGrap(spaceNumber,starNumber/2);
printALine(spaceNumber,starNumber);
printGrap(spaceNumber+starNumber/2,starNumber/2);
}


}

private static void printALine(int spaceNumber,int starNumber)
{
for (int i = 0; i < spaceNumber; i++)
System.out.print(' ');
for (int i = 0; i < starNumber; i++)
System.out.print('*');
System.out.println();
}
}

michael122 2010-10-26
  • 打赏
  • 举报
回复
第二个问题,以前写过,给你参考一下

# include<stdio.h>
# include<math.h>
char a[100][100];
void print(int n, int x, int y)
{
if (n==1) { a[x][y]='*'; return;}
print(n-1, x, y);
for(int i=0; i<pow(2,n-1);i++) a[x+int(pow(2,n-1))-1][y+i]='*';
print(n-1, x+pow(2,n-1),y+pow(2,n-2));
}
int main()
{
int n;
while(1){
printf("n=");
scanf("%d",&n);
if (n==0) break;
print(n,0,0);
for(int i=0; i<pow(2,n)-1; i++){
for(int j=0; j<pow(2,n-1); j++)
if (a[i][j]==0) printf(" ");
else printf("%c",a[i][j]);
printf("\n");
}
}
}

lord_is_layuping 2010-10-26
  • 打赏
  • 举报
回复
上面最后的那个图歪了,重新发张:

taoshengyijiuwu 2010-10-26
  • 打赏
  • 举报
回复
学习了……

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧