これはあなたが望むものでありますか?
#include <stdio.h>
void print(int n)
{
int i;
if (n > 0) // [2]
{
//call print recursively
print(n-1); // [3]
for (i=1; i<=n; i++) // [4]
printf("%d",i);
printf("\n");
}
}
int main(int argc, char *argv[])
{
// If no argument, default to 8
int value=8;
if (argc > 1 )
value = atoi(argv[1]);
print(value); // [1]
return 0;
}
それをコンパイルして、次のように実行します。
display 3
または引数なし(デフォルトはdisplay 8
):
display
秘訣はprint(n-1)
、現在の出力を出力する前に呼び出すことn
です。これは、次のように実行されたときのプログラムフローdisplay 3
です。
<main() function is running>
main() calls print(3) in [1]
<print(3) is running, n is 3>
since n>0 in [2] print(3) calls print(2) in [3]
<print(2) is running, n is 2>
since n>0 print(2) calls print(1)
<print(1) is running, n is 1>
since n>0 print(1) calls print(0)
<print(0) is running, n is 0>
since n=0 print(0) doesn't print anything and returns
now the function that called print(0) (that is, print(1)) takes over
<print(1) is running, n is 1, continues executing in [4]>
print (1) enters the for loop, prints "1\n" and returns
now the function that called print(1) (that is, print(2)) takes over
<print(2) is running, n is 2, continues executing in [4]>
print(2) enters the for loop, prints "12\n" and returns
now the function that called print(2) (that is, print(3)) takes over
<print(3) is running, n is 3, continues executing in [4]>
print (3) enters the for loop, prints "123\n" and returns
now the function that called print(3) (that is, main()) takes over
<main() is running>
main executes return(0) and exits
これがコンソールに出力されるものです。
1
12
123
print(n-1)
あなたが持っている後に移動する場合printf("\n")
:
123
12
1