视觉对象 返回 C++ 中的双精度值

visual Returning a double value in C++

本文关键字:双精度 C++ 对象 返回 视觉      更新时间:2023-10-16

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

#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() 函数打印总和时,会打印正确的值。但是在下一行中,我们返回总和并将其保存在main()函数的z变量中。当我们尝试打印该值时,它显示 -nan(ind)

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

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

你至少应该写

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

而不是

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

编译器应该给你一个警告,甚至是问题的错误。如果没有,请将警告级别调高。

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

递归函数不只是返回一次,你必须从每一步返回。在这种情况下,您返回最后一个值,但对函数的上一个调用会丢弃它。您需要不断退回它。因此,您需要使用

return sumseries(sum, count);

以继续将值返回到上一步。

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

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

而不仅仅是

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