我正在嘗試開發一個 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;
}
謝謝..
uj5u.com熱心網友回復:
遞回呼叫函式 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
當然,您只能為偶數呼叫該函式,盡管該函式更通用并且可以為任何非負數呼叫。
函式本身不應該依賴于傳遞給它的是偶數還是奇數。
uj5u.com熱心網友回復:
我認為如果問題指出您必須使用遞回,那么以這種方式使用遞回會更有意義:
#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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/363237.html
