C 迷失在递归中如何反转打印用户输入的单个字符并将其相乘
抱歉说得含糊不清,但我只是无能为力,在这上面坐了4个小时:|C 迷失在递归中如何反转打印用户输入的单个字符并将其相乘,c,recursion,C,Recursion,抱歉说得含糊不清,但我只是无能为力,在这上面坐了4个小时:| #include <stdio.h> int temp (int count) { int j = 0; char c; printf("Enter a char\n"); do { c = getchar(); } while(c=='\n'); if (c == 'x') return; temp(count+1)
#include <stdio.h>
int temp (int count)
{
int j = 0;
char c;
printf("Enter a char\n");
do
{
c = getchar();
}
while(c=='\n');
if (c == 'x')
return;
temp(count+1);
for (j=0;j <count+1;j++)
putchar(c);
printf("\n");
return count;
}
int print_in_reverse()
{
int count = 0;
temp(0);
printf("%d\n" , count);
}
#包括
内部温度(内部计数)
{
int j=0;
字符c;
printf(“输入字符”);
做
{
c=getchar();
}
而(c=='\n');
如果(c='x')
返回;
温度(计数+1);
对于(j=0;j您离目标太近了。如果您将count
作为参数传递,则在更深的递归中会得到更大的值。将其移动到返回,以便在更深的递归中得到更小的值
#include <stdio.h>
int temp ()
{
int j = 0;
int count;
char c;
printf("Enter a char\n");
do
{
c = getchar();
}
while(c=='\n');
if (c == 'x')
return 0;
count = temp(); /* Recursive call. */
for (j=0;j <count+1;j++)
putchar(c);
printf("\n");
return count+1; /* Return an increased count. */
}
int print_in_reverse()
{
int count = 0;
count = temp();
printf("%d\n" , count);
}
#包括
内部温度()
{
int j=0;
整数计数;
字符c;
printf(“输入字符”);
做
{
c=getchar();
}
而(c=='\n');
如果(c='x')
返回0;
count=temp();/*递归调用*/
对于(j=0;jprint(“%dn”,temp(0);)
,您正在主要打印count=0
。了解范围,count有局部范围,但它仍然不起作用…通常我的结果与我需要的相反;(@user3445443他只是想引用那一行,而不是告诉你把它改成他写的。他只是在写的时候打错了字,这就是为什么它和你的不同。在print_In_reverse()中)
,您定义一个变量count
,并将其设置为0
,然后打印出来,而不在其间进行任何更改。结果只能是0
。您需要意识到print\u in\u reverse()
中的count
与temp()中的不同
。在检查c==“x”
时,c
的值是一个换行符-检查前的do
循环强制执行该换行符。此外,打开编译器警告。例如,当输入以x
结束时,返回值不带值。您也不跟踪递归深度,b因为您不使用来自temp
@MOehm的结果,do循环强制执行相反的操作:它将在(c=='\n'时循环)
,所以c在退出时不能\n
谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生!谢谢好心先生先生!谢谢你,好心的先生!