VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 4305|回复: 3

棱型星星main函数递归实现

[复制链接]
16_avatar_middle
最佳答案
0 
在线会员 发表于 2019-3-29 13:11:21 | 显示全部楼层 |阅读模式
15驿站币
  1. #include <stdio.h>
  2. int iLine = 1;
  3. int main(void)
  4. {
  5.     printf("%*s \n", 7 - (iLine>4 ? iLine - 4 : 4 - iLine), "*******" + 2 * (iLine>4 ? iLine - 4 : 4 - iLine));
  6.     if (++iLine != 8) main();
  7.     return 0;
  8. }
复制代码

谁来详细分析一下这段代码?

最佳答案

查看完整内容

这写法好暴力,main是程序入口,保留字递归。 难点 printf("%*s",w,"*******"+n); 函数中*是宽度通配符,w是宽度,n是输出串的起点位置 测试: printf("%*s \n", 7, "*******" + 1); printf("%*s \n", 7, "*******" + 2); printf("%*s \n", 7, "*******" + 3); printf("%*s \n", 7, "*******" + 4); printf("%*s \n", 7, "*******" + 5); printf("%*s \n", 7, "*******" + 6); printf("%*s \n", 7, "*******" + 7); 运行 ...




上一篇:libcurl发送formData包含二进制数据
下一篇:目前文件透明加密技术的研究

本帖被以下淘专辑推荐:

75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-3-29 13:11:22 | 显示全部楼层
这写法好暴力,main是程序入口,保留字递归。
难点 printf("%*s",w,"*******"+n);
函数中*是宽度通配符,w是宽度,n是输出串的起点位置
测试:
printf("%*s \n", 7, "*******" + 1);
printf("%*s \n", 7, "*******" + 2);
printf("%*s \n", 7, "*******" + 3);
printf("%*s \n", 7, "*******" + 4);
printf("%*s \n", 7, "*******" + 5);
printf("%*s \n", 7, "*******" + 6);
printf("%*s \n", 7, "*******" + 7);
运行结果:
******
  *****
   ****
    ***
     **
      *

请按任意键继续. . .

这是一个非标准C用法,标准C中串哪有加数字地。但是它能运行。查资料,没有讲+n的,
测试发现不但可以加n,还可以-n,||n,比较流氓,都能编译通过,但运行结果是未知地。
递归控制结束是全局变量iLine。每次子递归只执行了一遍,直到iLine==8。
递归到iLine==8时,就都退出了。
强调一下,代码那样写,霸占main,即使是小测试程序,都会把无辜的人被卷入一场递归的是非漩涡。
要不得。垄断main要收租金。
该代码的等效代码:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int iLine = 1;
int pattern()
{
        //printf("%*s \n", 7 - (iLine>4 ? iLine - 4 : 4 - iLine), "*******" + 2 * (iLine>4 ? iLine - 4 : 4 - iLine));
        char *s ="*******";
        if (iLine > 4)        cout << setw(7 - (iLine - 4)) << (char*)&s[2 * (iLine - 4)] << endl;
        else                        cout << setw(7 - (4 - iLine)) << (char*)&s[2 * (4 - iLine)] << endl;
        if (++iLine != 8) pattern();
        return 0;
}
int main(void) { return pattern();}
运行结果:
   *
  ***
*****
*******
*****
  ***
   *
请按任意键继续. . .

棱型星星main函数递归实现
85_avatar_middle
最佳答案
3 
在线会员 发表于 2019-3-30 18:42:44 | 显示全部楼层
printf("%*s \n", 7 - (iLine>4 ? iLine - 4 : 4 - iLine), "*******" + 2 * (iLine>4 ? iLine - 4 : 4 - iLine));   打印规则
if (++iLine != 8) main(); 调用自己,下一行打印规则   条件++iLine == 8 不在调用自己

评分

参与人数 1驿站币 +1 热心值 +1 收起 理由
16_avatar_small firefox + 1 + 1 很给力!

查看全部评分

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-10-1 09:18

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表