You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归幂运算程序中np()函数返回1.#QUAN0而非实际值的问题

问题分析与修复

核心问题:递归函数未返回递归调用结果

你的pp和np函数在else分支中,执行递归调用后没有返回该调用的结果。这会导致函数执行到末尾时没有明确的return语句,返回的是未定义的垃圾值——不同编译器、运行环境对这种情况的处理不同,这就是为什么在你电脑上负幂出现1.#QUAN0(实际是NaN,非法数值),而学长电脑能运行的原因。

比如np函数的else分支:

m *= (1/i);
np(i,j+1,m);
// 这里没有return np(...)的结果!

当j不等于0时,函数执行完递归调用后,没有返回值,栈里的返回值是随机的,最终触发NaN输出。

修复方案

给两个函数的else分支加上return语句,返回递归调用的结果即可解决问题:

修复后的完整代码

#include <stdio.h>

int pp(int i, int j, int m)
{
    if(j==0)
        return m;
    else
    {
        m *= i;
        return pp(i,j-1,m); // 新增return返回递归结果
    }
}

float np(float i,int j,float m)
{
    if(j==0)
        return m;
    else
    {
        m *= (1/i);
        return np(i,j+1,m); // 新增return返回递归结果
    }
}

int main()
{
    int i;
    int j;
    printf("Enter the value of i=");
    scanf("%d",&i);
    printf("Enter the value of j=");
    scanf("%d",&j);
    if(j>=0)
        printf("%d",pp(i,j,1));
    else
        printf("%f",np((float)i,j,(float)1));

    return 0;
}

额外说明

  • 1.#QUAN0是编译器对**NaN(非数值)**的打印形式,通常出现在使用未定义的数值时;
  • 你的递归逻辑本身是正确的:正幂通过j递减到0累加乘积,负幂通过j递增到0累乘倒数,仅缺少返回递归结果的关键步骤。

内容的提问来源于stack exchange,提问作者Vikryansh Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 09:05:05