- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
打印下面的图片时遇到一些问题。
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 (16 times)
2 2 2 2 2 2 2 2 2 2 2 2 (12 times)
3 3 3 3 3 3 3 3 (8 times)
4 4 4 4 (4 times)
3 3 3 3 3 3 3 3 (8 times)
2 2 2 2 2 2 2 2 2 2 2 2 (12 times)
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 (16 times)
实现迭代算法对我来说很容易,但我必须使用递归。我编写了以下代码(C++),似乎可以完成这项工作。
void print(int n, int current)
{
int offset = (n / 2) * (current - 1);
int i;
for (i = 0; i < offset; i++)
printf(" ");
for (i = 1; i <= (n - current + 1) * n; i++)
printf("%i ", current);
printf("\n");
}
void picture(int n, int current)
{
if (current < n) {
print(n, current);
picture(n, current + 1);
print(n, current);
}
else
if (current == n)
print(n, current);
}
int main()
{
int n;
input: printf("Enter n --> ");
scanf_s("%i", &n);
if ((n < 1) || (n > 9) || (n % 2 == 1)) {
printf("ERROR: n must be an even decimal digit!\n");
goto input;
}
picture(n, 1);
return 0;
}
我想知道这里是否有更简单的方法来编写递归函数。
更新:我尝试在打印“金字塔”的更简单问题中识别递归:
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
函数pyram
接收两个参数:最大数量n
(在我们的例子中为 5)和当前号码 k
。 k
打印 k
次,然后pyram
使用参数 n
调用和k + 1
。仅当 k <= n
时才会发生这种情况.
void pyram(int n, int k)
{
if (k <= n) {
for (int i = 1; i <= k; i++)
printf("%i ", k);
printf("\n");
pyram(n, k + 1);
}
}
我已经以类似的方式编写了原始问题的解决方案。
最佳答案
您可以在递归函数中使用静态变量。在这种情况下,函数声明看起来会更简单,并且不需要辅助函数。
例如
#include <stdio.h>
void display_pattern( unsigned int n )
{
const unsigned int FACTOR = 4;
static unsigned int value = 1;
static int indent = 1;
if ( n )
{
printf( "%*u", indent, value );
for ( unsigned int i = 1; i < FACTOR * n; i++ ) printf( " %u", value );
putchar( '\n' );
indent += FACTOR;
++value;
display_pattern( --n );
indent -= FACTOR;
--value;
}
if ( n++ )
{
printf( "%*u", indent, value );
for ( unsigned int i = 1; i < FACTOR * n; i++ ) printf( " %u", value );
putchar( '\n' );
}
}
int main(void)
{
const unsigned int N = 10;
while ( 1 )
{
printf( "Enter a non-negative number less than %u (0 - exit): ", N );
unsigned int n;
if ( scanf( "%u", &n ) != 1 || n == 0 ) break;
if ( !( n < N ) ) n = N - 1;
putchar( '\n' );
display_pattern( n );
putchar( '\n' );
}
return 0;
}
程序输出如下所示
Enter a non-negative number less than 10 (0 - exit): 10
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
7 7 7 7 7 7 7 7 7 7 7 7
8 8 8 8 8 8 8 8
9 9 9 9
8 8 8 8 8 8 8 8
7 7 7 7 7 7 7 7 7 7 7 7
6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Enter a non-negative number less than 10 (0 - exit): 4
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3
4 4 4 4
3 3 3 3 3 3 3 3
2 2 2 2 2 2 2 2 2 2 2 2
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Enter a non-negative number less than 10 (0 - exit): 0
至于函数pyram
,它可以看起来像
void display_triangle( unsigned int n )
{
if ( n )
{
display_triangle( n - 1 );
for ( unsigned int i = 0; i < n; i++ ) printf( "%u ", n );
putchar( '\n' );
}
}
关于c - 使用递归打印控制台 "picture",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48808219/
我想创建一个(最好)HTML 代码,将内容从另一个小页面加载到当前网站。小页面的内容是一组带有动态变化的图像的 anchor (因此将它们编码到要显示它们的页面中是不切实际的)。这样的功能是否可以在纯
这个问题在这里已经有了答案: What does a space mean in a CSS selector? i.e. What is the difference between .clas
我正在尝试在网站上放置响应图像。我有以下代码 图片元素的大小将由包含的 div 决定。 包含的 div 的大小将是随机的。可以直接放在.container里,也可以放在.col-sm-
我正在使用 Opentok.js,我想以画中 Canvas 局显示订阅者和发布者。当我调整窗口大小时,它应该具有响应性并保持比例,以及如何以全屏方式获取视频,即使视频是“320x240”吗? 最佳答案
html 元素 video有一个名为 disablePictureInPicture 的属性虽然它似乎只适用于 chrome,但它工作得很好。 由于我只能找到有关此问题的旧帖子,这些帖子最终没有解决或
我正在尝试在我的应用中支持分屏功能。 目前目标SDK是27 defaultConfig { applicationId "com.myvestige.vestigedeal"
编辑:本文末尾的 Anwser。 借助内置的 Facebook SDK 函数 Request(),我正在尝试获取 Facebook 用户的头像。 我正在使用 /me/picture 调用来获取个人资料
错误消息 java.lang.IllegalStateException: enterPictureInPictureMode: Current activity does not support p
我可以使用 jquery(或 javascript)强制 html5 video 播放器以画中画 模式播放吗?(下图) . 这是我使用 jquery 3.3.1(由 Google 托管)的个人网站。现
假设文本 = T,图像 = M 桌面订单: M T 需要手机下单: T M 我需要桌面和移动设备上的响应行为。 .container{width:100%;} #image {width:50%;}
使用相机 API 拍照后,这张照片会显示在屏幕/此 Activity 上。我想将这张覆盖整个屏幕的图片发送到另一个名为 PictureEditor 的 Activity 。在那里我将添加可以编辑图片的
我使用 YouTube iframe js API 在 Firefox 中收到此警告 如何处理? 最佳答案 YouTube API 正在向浏览器发送调用,但浏览器响应说“我不支持”,然后在控制台中让您
我正在使用 标签。我的目标群体使用现代浏览器,所以尽快 Firefox supports WebP没有必要使用标签。 现在: 很快: 有没有办法实现 alt
Hello Together 遵循我的代码: public class SampleData : DropCreateDatabaseIfModelChanges { protecte
我在为主 设置正确的宽度和高度时遇到问题img src 块内。 如果我把它留给 宽度="100%"高度="100%"视觉上还可以,但 Google 搜索 PageSpeed
我正在尝试使图片元素工作,但它不会加载后备 img Locat
打印下面的图片时遇到一些问题。 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 (16 times) 2 2 2 2 2 2 2 2 2 2 2 2
我想不通为什么我的 img 在 picture 标签中不想显示?有任何想法吗? 谢谢! 最佳答案 你的图片路径有误。看我的例子
我有一种情况需要将 CSS 文件中的图像提供给 goJs go.picture 方法。不是来自交叉起源。如何通过。 GO(go.Picture, {source: 'images/sample.png
我需要一些帮助来理解为什么有人会在网页中加载这样的图像?我的意思是最后的两个标签和标签。 如何决定加载哪个图像? 背后有框架吗? 这是否意味着它加载两个图像并以不同的分辨率在它们之间切换?
我是一名优秀的程序员,十分优秀!