运用递归写三角形

1.带for循环的:

View Code
 1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 int m;
5 int deal( int n )
6 {
7
8 if( n == 1 )
9 {
10 for( int i = 0; i <= (m-n); i++ )
11 printf( " " );
12 printf( "*\n" );
13 }
14 else
15 {
16 for( int i = 0; i < (m-(1+(n-1)*2)/2); i++ )
17 printf( " " );
18 for( int i = 0; i < (1+(n-1)*2); i++ )
19 printf( "*" );
20 puts( " " );
21 deal( n-1 );
22 }
23 }
24 int main()
25 {
26 int n;
27 scanf( "%d", &n );
28 m = n;
29 deal( n );
30 system( "pause" );
31 }

2.不用for循环的(狗神给的灵感……囧,这么多函数……本来想两个函数果断过的……):

View Code
 1 #include<stdio.h>
2 #include<stdlib.h>
3 int print1( int n )
4 {
5 if( n == 0 )
6 {
7 puts( " " );
8 return 0;
9 }
10 printf( "*" );
11 return print1( n-1 );
12 }
13
14 int print2( int n )
15 {
16 if( n == 0 )
17 return 0;
18 printf( " " );
19 return print2( n-1 );
20 }
21
22 int deal( int n )
23 {
24 static int a = 1;
25 if( n == 0 )
26 {
27 a = 1;
28 printf( "*\n" );
29 return 0;
30 }
31 print1( 2*n+1 );
32 print2( a );
33 a++;
34 return deal( n-1 );
35 }
36
37 int main()
38 {
39 int n;
40 while( scanf( "%d", &n ) && n )
41 {
42
43 deal( n -1 );
44 }
45 return 0;
46 }
原文地址:https://www.cnblogs.com/zsj576637357/p/2367264.html