C++ 基本递归程序中的错误,有人能看到这个问题吗?

C++ 基本递归程序中的错误,有人能看到这个问题吗?,c++,function,recursion,C++,Function,Recursion,我这里有一个程序,它不断地对一个数字进行求和,直到得到一个数字。例如,给定num=38,该过程类似于:3+8=11,1+1=2。因为2只有一个数字,所以返回它 问题是,返回到main的值是垃圾,但就在从函数addDigits()返回该值之前,它是正确的。有人能看到我的虫子吗?这快把我逼疯了。非常感谢 #include <iostream> #include <vector> #include <stdio.h> using namespace std;

我这里有一个程序,它不断地对一个数字进行求和,直到得到一个数字。例如,给定num=38,该过程类似于:3+8=11,1+1=2。因为2只有一个数字,所以返回它

问题是,返回到main的值是垃圾,但就在从函数addDigits()返回该值之前,它是正确的。有人能看到我的虫子吗?这快把我逼疯了。非常感谢

#include <iostream>
#include <vector>
#include <stdio.h>

using namespace std;


int addDigits(int num)
{
    vector <int> nums;

    if (num <10)
    {
        return num;
    }

    int rem, temp = 0;

    while (num > 9)
    {
        temp = num /10;
        rem = num %10;
        nums.push_back(rem);
        num = temp;
    }

    nums.push_back(num);

    int total = nums[0];
    for (int i = 1;  i < nums.size(); i++)
    {
        total += nums[i];
    }

    cout<<"total :"<<total<<endl;



    if (total >= 10)
    {
        addDigits(total);
    }

    else
    {
        return total;
    }

}

int main()
{
    int val   = 0;
    int total = 0;

    while(1)
    {
        cout<<"Enter a number : "<<endl;
        cin>>val;

        total = addDigits(val);

        cout<<total<<endl;
    }
}
#包括
#包括
#包括
使用名称空间std;
int addDigits(int num)
{
向量nums;
如果(数字9)
{
温度=num/10;
rem=num%10;
nums.推回(rem);
num=温度;
}
nums.推回(num);
整数总计=nums[0];
对于(int i=1;icout
addDigits(total);
-此分支不返回任何内容。

您不返回递归调用:

addDigits(total);
//should be
return addDigits(total);
您应该确保在编译器中打开了警告,以捕获如下问题。例如,GCC会发出以下警告:

警告:控件到达非无效函数的末尾[-Wreturn类型]


@Engineer999你的编译器没有警告你不要返回任何东西吗?我也不知道为什么会有反对票?他们希望这里的每个人都是专家吗?那么就没有必要了forum@Engineer999我自己并没有投反对票,但我可以想象那些投反对票的人会这样做,因为这很容易通过运行它来解决ugh是一个调试器。和/或启用和读取编译器警告。它不是论坛,也不是调试服务。我看不出这个问题对其他访问者有什么帮助?我认为一个更简单的解决方案是
return num<10?num:addDigits(num%10+addDigits(num/10));
,但我承认我的模运算有点生疏。谢谢!不知道我怎么没发现it@Engineer999始终使用-Wall-Wextra编译,并修复编译器向您抛出的每个警告。