C 递归,算法中可能出现错误

C 递归,算法中可能出现错误,c,algorithm,recursion,C,Algorithm,Recursion,我正在用C编写一个简单的程序,5位数的数字之和。虽然我用了一个简单的函数,但我也需要用递归。我在网上读过很多关于这个问题的解决方案,并用递归实现了我的一个。但这是一个错误,我无法弄清楚我在我的算法中正在做什么网格 #include<stdio.h> int sum5(int x); //function for sum of digits of 5 digit number int main() { int x; int result; printf("Ent

我正在用C编写一个简单的程序,5位数的数字之和。虽然我用了一个简单的函数,但我也需要用递归。我在网上读过很多关于这个问题的解决方案,并用递归实现了我的一个。但这是一个错误,我无法弄清楚我在我的算法中正在做什么网格

#include<stdio.h>
int sum5(int x);  //function for sum of  digits of 5 digit number

int main()
{
   int x;
   int result;
   printf("Enter a 5 digit number : ");
   scanf("%d",&x);
   printf("Number entered by you is %d",x);
   result = sum5(x);
   printf("Sum of digits of 5 digit number is = %d",&result);
   return 0;
}

int sum5(int x)
{
   int r;
   int sum=0;
   if(x!=0){
      r=x%10;
      sum=sum+r;
      x=x-r;      //doing this so that 0 come in the last and on diving it by 10, one digit will be removed.
      sum5(x/10);
   }
   return sum;
}
#包括
int sum5(int x)//5位数字的位数和函数
int main()
{
int x;
int结果;
printf(“输入一个5位数字:”);
scanf(“%d”和&x);
printf(“您输入的数字是%d”,x);
结果=sum5(x);
printf(“5位数字的位数之和=%d”,&result);
返回0;
}
int sum5(int x)
{
INTR;
整数和=0;
如果(x!=0){
r=x%10;
sum=sum+r;
x=x-r;//这样做是为了让0排在最后一位,然后将其除以10,一个数字将被删除。
sum5(x/10);
}
回报金额;
}

但是在它执行之后,我得到了错误的结果。它在输出上转储了一些匿名值。

这是错误的,因为它打印的是
结果的地址,而不是它的值:

printf("Sum of digits of 5 digit number is = %d",&result);
改为:

printf("Sum of digits of 5 digit number is = %d", result);
始终检查的结果以确保读取了有效值:

/* Returns number of assignments made. */
if (scanf("%d", &x) == 1 && x > 9999 && x < 100000)
{
}
/*返回所做分配的数量*/
如果(扫描频率(“%d”,&x)==1&&x>9999&&x<100000)
{
}


加上执行
sum5()
时出现的错误。

这是不正确的,因为它打印的是
结果的地址,而不是其值:

printf("Sum of digits of 5 digit number is = %d",&result);
改为:

printf("Sum of digits of 5 digit number is = %d", result);
始终检查的结果以确保读取了有效值:

/* Returns number of assignments made. */
if (scanf("%d", &x) == 1 && x > 9999 && x < 100000)
{
}
/*返回所做分配的数量*/
如果(扫描频率(“%d”,&x)==1&&x>9999&&x<100000)
{
}


加上执行
sum5()
时出现的错误。

此外,您的
sum5
函数不正确。必须将
sum5
的值添加到调用者函数的
sum
变量中

int sum5(int x)
    {
        int r;
        int sum = 0;
        if (x != 0) {
            r = x % 10;
            sum = r;
            //x = x - r;  - this isn't required. integer division will floor x
            sum += sum5(x / 10);
        }
        return sum;
    }

此外,您的
sum5
功能不正确。必须将
sum5
的值添加到调用者函数的
sum
变量中

int sum5(int x)
    {
        int r;
        int sum = 0;
        if (x != 0) {
            r = x % 10;
            sum = r;
            //x = x - r;  - this isn't required. integer division will floor x
            sum += sum5(x / 10);
        }
        return sum;
    }

这部分是无用的x=x-r;因为你随后发送的内容将删除最右边的数字。它不起作用,因为没有人从递归调用中获取返回值;因为你随后发送的内容将删除最右边的数字。它不起作用,因为没有人从递归调用中获取返回值。是的,这&result是一个愚蠢的错误。如果(scanf(“%d”),&x)==1{}这发现非常有用。是的,这&result是一个愚蠢的错误。如果(scanf(“%d”),&x)==1{}这发现非常有用。@0A0D:我用我的代码尝试过它,基本上,对于&result-error,我并没有添加递归的结果,但现在它可以工作了fine@0A0D:我已经用我的代码试过了,基本上带有&result错误我没有添加递归的结果。但是现在它工作正常了