在C ++中返回double值

时间:2017-01-31 13:40:47

标签: c++ visual-c++

我正在尝试制作一个程序,它给出了系列1的总和!+2 / 2!+3/3!........... n / n! 这是我的代码。

#include "stdafx.h"
#include<conio.h>
#include <stdio.h>
#include <stdlib.h>

int n;

double sumseries(double sum, double count)
{
    double fac = 1, i;
    for (i = 1; i <= count; i++)
        fac = fac*i;

    sum += (count++ / fac);
    if (count <= n)
        sumseries(sum, count);
    else {
        printf("sum of series is:%lf", sum);
        return sum;
    }
}

int main()
{
    printf("enter the limit");
    scanf_s("%d", &n);
    double z = sumseries(0,1);
    printf("\n%lf",z);
    system("pause");
 }

现在,当我们从sumseries()函数打印sum时,会打印正确的值。但是在下一行中,我们返回总和并将其保存在main()函数中的z变量中。当我们尝试打印该值时,它会显示-nan(ind)

我的问题不是如何解决这个问题或如何使这个程序工作。我要问的是上面代码中导致此问题的原因。为什么没有返回正确的值。

3 个答案:

答案 0 :(得分:4)

sumseries函数中,并非所有流控制路径都返回值。

你至少应该写

if (count <= n)
    return sumseries(sum, count);

而不是

if (count <= n)
    sumseries(sum, count);

答案 1 :(得分:1)

您的编译器应该给出警告,甚至是问题的错误。如果没有,请将警告级别提高。

你有一个递归函数sumseries,但是你不会从导致结束的所有路径返回一个值。因此,返回值是不确定的。

递归函数不会返回一次,您必须从每一步返回。在这种情况下,您返回最后一个值,但之前对该函数的调用会将其抛出。你需要继续回来。因此,您需要使用

return sumseries(sum, count);

继续将值返回到上一步。

答案 2 :(得分:0)

sumseries()中的控制流可能会到达其结尾并返回未定义的值。您需要在代码中使这种情况变得不可能。您可能想要使用此声明:

if (count <= n)
    return sumseries(sum, count);

而不仅仅是

if (count <= n)
       sumseries(sum, count);