首页 > 解决方案 > 此代码显示错误。你能教我什么是错误以及如何改变它吗?

问题描述

ERRRO CODE(高级电源功能)

当我操作这段代码并编写输入时,输出是错误的。

使用:ln(x), e^x

考虑什么时候 a == 0 x 可以是正数、负数或零或任何小数,如果 a==0 -> a^x=0

a^x=advancedpower(ln(exp(power(a^x)))
#include <stdio.h> 
#include <assert.h> 
int factorial(int x) 
{  
  if(x>0) 
  { 
    return (x*factorial(x-1)); 
    } 
    if(x==0) 
    {
    return 1; 
    } 
    else 
    return 0; 
}
float power(float x, float y) 
{ 
  float r; 
  r=1.0; 
  if (x==0) 
  { 
    return 0; 
    } 
    if (y==0&& x!=0) { 
    return 1; 
    } 
    else 
    for(int i=1; i<=y;i++) { 
    r=r*x;
    } 
    return r; 
} 

float exp(float x){ 
  float sum=1.0; 
  for (int i = 0;i<10; i++) { 
  sum = sum + (power(x,i)/factorial(i)); 
  } 
  return sum; 
} 

float ln(float x)
{ 
assert(x > 0); 
float o= 1.0; 
    for (int i = 1;; i++) { 
    int k = 2*i-1; 
    float t = 2.0* power((x-1)/(x+1),k)/k; 
    o=o+t; 
    } 
    return o; 
} 

float advancedpower(float n1,float n2){ 
    if (n1 ==0){
    return 0; 
    } 
    else 
    return (exp(power(n1,n2))); 
} 

int main() 
{ 
  float a, x; 
  scanf("%f%f", &a, &x); 
  printf("%.4f", advancedpower(a, x)); 
  return 0; 
}

输入 2.0 0.5 输出 1.4142

但是当我输入 2.0 0.5 时,输出是 3.7183

我应该改变什么......

标签: c

解决方案


输入“2.0 0.5”,a设置为 2,x设置为 0.5。然后advancedpower使用参数 2 和 .5 调用。反过来,也使用参数 2 和 .5advanceddpower调用。power

power是一个递归函数。当xy不为零时,它调用power(x, y - 1). 这导致power使用参数 2 和 -.5 进行调用。然后它再次执行相同的代码,power使用参数 2 和 -1.5 进行调用。然后再次使用 2 和 -2.5。这种情况一直持续到堆栈耗尽,程序崩溃。

尚未编写此代码来处理这些值。你需要重新考虑设计。


推荐阅读