我试图让我的计划在计数到十之后倒计时。我试图改变代码,使其倒计时无效。
#include <stdio.h>
void count(int k)
{
if (k > 0) {
count(-k + 1);
printf("%d", k);
}
else {
if (k == 0)
{
printf("%d,", k);
}
else {
count(k + 1);
printf("%d,", -k);
}
}
}
int main(int argc, char ** argv)
{
count(10);
getchar();
return 0;
}
答案 0 :(得分:2)
这是一个简单的递归示例,它说明了Eugene的评论:
#include <stdio.h>
void count(int n) {
if (n > 10) {
printf("\n");
return;
}
printf("%d ", n);
count(n+1);
printf("%d ", n);
}
int main() {
count(0);
printf("\n");
return 0;
}
它会在递归的过程中计入,倒计时在它退出时。实际上在下来的路上它只会重新打印出潜入下一级别之前的状态:
0 1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1 0
答案 1 :(得分:0)
如果在其中使用静态局部变量,则可以轻松实现该函数。例如。
#include <stdio.h>
void count(unsigned int n)
{
static unsigned int m;
printf("%u ", m);
if (n != m)
{
++m;
count(n);
--m;
printf("%u ", m);
}
}
int main( void )
{
const unsigned int N = 10;
unsigned int i = 0;
do
{
count(i);
putchar('\n');
} while (i++ != N);
return 0;
}
程序输出
0
0 1 0
0 1 2 1 0
0 1 2 3 2 1 0
0 1 2 3 4 3 2 1 0
0 1 2 3 4 5 4 3 2 1 0
0 1 2 3 4 5 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1 0
在函数中,静态变量m
在for循环中表现为一个索引(或者有更合适的do-while循环)。
首先,它被零隐式初始化(如任何静态变量)
static unsigned int m;
如果需要,可以显式使用初始化程序
static unsigned int m = 0;
然后它从0变为n,然后从n再次向后变为0。
++m; // changing from 0 to n
count(n);
--m; // changing from n to 0