递归计数直到某个数字递减并备份
counting until a certain number down and back up with recursion
这是一个 C 作业。使用 void countDownUp(unsigned int k)
写一个递归来计数,直到某个数字下降然后立即备份。例如,如果 k = 3
,输出应该是 3 2 1 0 1 2 3
。我已经写了一个 countDown 函数
void countDown(unsigned int k)
{
printf("%d ", k);
if (k > 0)
countDown(k-1);
}
还有一个 countUp 函数。我在我的 void countDownUp(unsigned int k)
函数中使用了这个函数,如下所示:
void countDownUp(unsigned int k)
{
countDown(k);
static int n=0;
if(n < k){
printf("%d ", n+1);
n++;
countDownUp(k);
}
}
现在的输出是3 2 1 0 1 3 2 1 0 2 3 2 1 0 3 3 2 1 0
我知道它不起作用,但我不知道如何将它调整到正确的输出。有人可以给我一些建议吗?非常感谢!
不需要使用静态变量。函数可以写得更简单
#include <stdio.h>
void countDownUp( unsigned int n )
{
printf( "%u ", n );
if ( n )
{
countDownUp( n - 1 );
printf( "%u ", n );
}
}
int main(void)
{
countDownUp( 3 );
return 0;
}
程序输出为
3 2 1 0 1 2 3
至于你的功能实现
void countDownUp(unsigned int k)
{
countDown(k);
static int n=0;
if(n < k){
printf("%d ", n+1);
n++;
countDownUp(k);
}
}
然后函数内的调用
countDownUp(k);
anew 调用 countDown(k);
使用与传递给函数 countDownUp
的当前调用相同的 k
值,因为在函数内 k
的值是不变..
您还需要指定转换说明符 %u
而不是 %d
因为变量 k
的类型为 unsigned int
.
问:一般情况下CountDownUp()
是做什么的?
A: 它打印了两次 n,中间的结果是 CountDownUp(n - 1)
。
void CountDownUp(int n) {
printf("%d ", n);
CountDownUp(n - 1);
printf("%d ", n);
}
问:停止条件是什么?
A: 当调用 CountDownUp 时用 0.
问:那我们怎么办?
A: 只打印一次,停止递归。
void CountDownUp(int n) {
printf("%d ", n);
if (n == 0) return;
CountDownUp(n - 1);
printf("%d ", n);
}
这是一个 C 作业。使用 void countDownUp(unsigned int k)
写一个递归来计数,直到某个数字下降然后立即备份。例如,如果 k = 3
,输出应该是 3 2 1 0 1 2 3
。我已经写了一个 countDown 函数
void countDown(unsigned int k)
{
printf("%d ", k);
if (k > 0)
countDown(k-1);
}
还有一个 countUp 函数。我在我的 void countDownUp(unsigned int k)
函数中使用了这个函数,如下所示:
void countDownUp(unsigned int k)
{
countDown(k);
static int n=0;
if(n < k){
printf("%d ", n+1);
n++;
countDownUp(k);
}
}
现在的输出是3 2 1 0 1 3 2 1 0 2 3 2 1 0 3 3 2 1 0
我知道它不起作用,但我不知道如何将它调整到正确的输出。有人可以给我一些建议吗?非常感谢!
不需要使用静态变量。函数可以写得更简单
#include <stdio.h>
void countDownUp( unsigned int n )
{
printf( "%u ", n );
if ( n )
{
countDownUp( n - 1 );
printf( "%u ", n );
}
}
int main(void)
{
countDownUp( 3 );
return 0;
}
程序输出为
3 2 1 0 1 2 3
至于你的功能实现
void countDownUp(unsigned int k)
{
countDown(k);
static int n=0;
if(n < k){
printf("%d ", n+1);
n++;
countDownUp(k);
}
}
然后函数内的调用
countDownUp(k);
anew 调用 countDown(k);
使用与传递给函数 countDownUp
的当前调用相同的 k
值,因为在函数内 k
的值是不变..
您还需要指定转换说明符 %u
而不是 %d
因为变量 k
的类型为 unsigned int
.
问:一般情况下CountDownUp()
是做什么的?
A: 它打印了两次 n,中间的结果是 CountDownUp(n - 1)
。
void CountDownUp(int n) {
printf("%d ", n);
CountDownUp(n - 1);
printf("%d ", n);
}
问:停止条件是什么?
A: 当调用 CountDownUp 时用 0.
问:那我们怎么办?
A: 只打印一次,停止递归。
void CountDownUp(int n) {
printf("%d ", n);
if (n == 0) return;
CountDownUp(n - 1);
printf("%d ", n);
}