C语言 用递归方法求X的n次方

#include<stdio.h>#include<math.h>floatp(floatx,intn){floatw;if(n=0)w=1;elsew=p(n-1)*x... #include<stdio.h>
#include<math.h>
float p(float x,int n)
{
float w;
if(n=0)
w=1;
else
w=p(n-1)*x;
return w;
}
main()
{
printf ("%f",p(2,8));
}

请问这个代码有什么问题。。。
展开
 我来答
兔丞飞
高粉答主

推荐于2019-10-14 · 专注娱乐 专注娱乐 专注娱乐
兔丞飞
采纳数:25 获赞数:19893

向TA提问 私信TA
展开全部

#include<stdio.h>

int power(int x,int n)

{

if(n==0)

return 1;

elseif(n%2==1)

return x*power(x,n-1);

else{

int y=power(x,n/2);

return y*y;

}

}

int main()

{

int a,b,c;

printf("enter x and n:");

setvbuf(stdout,NULL,_IONBF,0);

scanf("%d%d",&a,&b);

c=power(a,b);

printf("结果为%d",c);

return 0;

}

扩展资料

#include<stdio.h>

double power(double x,int n);

main()

{

double x;

int n;

printf("Input x,n:");

scanf("%lf,%d",&x,&n);

printf("%.2lf",power(x,n));

}

double power(double x,int n)

{

double a=1.0;

int i;

for(i=1;i<=n;i++)

a*=x;

return a;

}

参考资料:百度百科 - 递归调用

墨染320
推荐于2019-10-18 · TA获得超过1341个赞
知道答主
回答量:91
采纳率:0%
帮助的人:7.5万
展开全部

答案:

#include<stdio.h>

double p(double x,int n);

int main()

{

printf("%lf",p(2,8));

return 0;

}

double p(double x,int n)

{

if(n == 0)

return 1;

else if(n == 1)

return x;

else

return pow(x,n -1)*x;

}

错误分析

#include<stdio.h>

#include<math.h>

float p(float x,int n)

{

float w;

if(n==0)///一个等于号代表赋值,两个等于号才是判断相等

w=1;

else if(n == 1)

w = x;

else

w=p(x,n-1);///p为函数,正确写法p(x,n-1);但是这样你没有实现递归,

return w;

}

int main()///main函数面前必须将数据类型,比如int

{

printf ("%f",p(2,4));

return 0;

}

拓展资料

递归,就是在运行的过程中调用自己。

构成递归需具备的条件:

函数嵌套调用过程示例

函数嵌套调用过程示例

1. 子问题须与原始问题为同样的事,且更为简单;

2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。



本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
杜哥是个小天才
推荐于2019-10-08 · TA获得超过1809个赞
知道答主
回答量:32
采纳率:0%
帮助的人:9379
展开全部

两个错误:

1.按算法n小于0时,y=1/(fun(x,n+1)*x); 

2.第二个条件应该为else if(n==0)如果是n=0,则成赋值表达式,该表达式为0即假,因此陷入死循环。

准确代码:

#include<stdio.h>

int power(int x,int n)

{

if(n==0)

return 1;

elseif(n%2==1)

return x*power(x,n-1);

else{

int y=power(x,n/2);

return y*y;

}

}

int main()

{

int a,b,c;

printf("enter x and n:");

setvbuf(stdout,NULL,_IONBF,0);

scanf("%d%d",&a,&b);

c=power(a,b);

printf("结果为%d",c);

return 0;

}

拓展资料

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。



本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
知识慧
推荐于2019-11-02 · TA获得超过4526个赞
知道答主
回答量:0
采纳率:50%
帮助的人:0
展开全部

问题:代码语法错误+逻辑错误。

第6行:if(n=0)应该为:if(n==1)

正确代码:

int main(int argc, const char * argv[]) 


{

// 求x的y次方


printf("%d\n",getSum(2, 8));


return 0;


int getSum(x,y){


int sum = 0;


if(y==1){


sum = x;


}else if(y>1){


sum = getSum(x, y-1)*x;


}


return sum; 


}

代码截图:

参考资料:百度百科-网页链接

扩展资料:

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。[1] 目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。

C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。

其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4de7b94
推荐于2017-10-03 · TA获得超过8157个赞
知道小有建树答主
回答量:1423
采纳率:93%
帮助的人:58.8万
展开全部
如下以2的10次为例给出代码:
#include<stdio.h>
#include<math.h>
double p(double x,int n)//因为不确定X为整型还是浮点型所以用double
{
 double f;
 if(n==0)//如果0次直接返回1
 {
  f=1;
 }
 else
 {
     f=p(x,n-1)*x;//此处为递归处理
 }
 return f;
}
int main()
{
 printf ("%.2f",p(2,10));//以两位小数输出
 return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式