在c中使用递归函数的星形模式
Posted
技术标签:
【中文标题】在c中使用递归函数的星形模式【英文标题】:star pattern using recursive func in c 【发布时间】:2022-01-01 09:34:04 【问题描述】:我正在尝试开发一个通过给定输入生成 * 模式的 C 代码。首先它必须打印星号下降 2 和上升 2 之后。像:
输入
enter number: 8
输出
********
******
****
**
****
******
********
这是我到目前为止所做的:
#include <stdio.h>
int printpattern(int n)
if(n==0)return 0;
printf("*");
printpattern(n-1);
int pattern(int n)
if(n==0)return 0;
puts("\n");
printpattern(n);
pattern(n-2);
int main()
int n;
puts("number: ");
scanf("%d", &n);
if(n%2==1)
puts("must be even");
main();
pattern(n);
return 0;
谢谢..
【问题讨论】:
您的代码格式错误,因此无法读取。你应该告诉我们你得到了什么输出以及问题是什么(不仅仅是“为我完成我的程序”)。您显然需要一个从 n 倒数到 1 或 2 的循环,打印最小值,然后再次返回到 n。如果你愿意,你也可以递归而不是循环。 永远不要从你的程序中调用main
。
请勿使用scanf
输入参数。 main
有 2 个参数,你应该在那里传递参数(即,作为启动程序时的参数)。
【参考方案1】:
我认为如果问题表明您必须使用递归,那么以这种方式使用递归会更有意义:
#include <stdio.h>
static void printstars(int n)
for (int i = 0; i < n; i++)
printf("*");
printf("\n");
static void printpattern(int n)
printstars(n);
if (n > 4)
printpattern(n - 2);
else
printstars(2);
printstars(n);
int main(void)
int n;
puts("number: ");
scanf("%d", &n);
if (n & 1)
fprintf(stderr, "must be even\n");
return 1;
printpattern(n);
return 0;
【讨论】:
【参考方案2】:递归调用main函数会导致每次调用main都会执行这些语句
puts("number: ");
scanf("%d", &n);
所以递归调用 main 不是一个好主意。
我会按照下面的演示程序所示的方式编写函数。
#include <stdio.h>
void print_pattern( unsigned int n )
if ( n )
putchar( '*' );
print_pattern( n - 1 );
void pattern( unsigned int n )
if ( n )
print_pattern( n );
putchar( '\n' );
if ( n > 2 )
pattern( n - 2 );
print_pattern( n );
putchar( '\n' );
int main(void)
while ( 1 )
printf( "Enter a non-negative number (0 - exit): " );
unsigned int n;
if ( scanf( "%u", &n ) != 1 || n == 0 ) break;
putchar( '\n' );
pattern( n );
putchar( '\n' );
return 0;
程序输出可能看起来像
Enter a non-negative number (0 - exit): 8
********
******
****
**
****
******
********
Enter a non-negative number (0 - exit): 7
*******
*****
***
*
***
*****
*******
Enter a non-negative number (0 - exit): 6
******
****
**
****
******
Enter a non-negative number (0 - exit): 5
*****
***
*
***
*****
Enter a non-negative number (0 - exit): 4
****
**
****
Enter a non-negative number (0 - exit): 3
***
*
***
Enter a non-negative number (0 - exit): 2
**
Enter a non-negative number (0 - exit): 1
*
Enter a non-negative number (0 - exit): 0
当然你可以只为偶数调用该函数,尽管该函数更通用并且可以为任何非负数调用。
函数本身不应依赖于传递给它的是偶数还是奇数。
【讨论】:
以上是关于在c中使用递归函数的星形模式的主要内容,如果未能解决你的问题,请参考以下文章