C语言 用递归方法求X的n次方
#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));
}
请问这个代码有什么问题。。。 展开
#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;
}
参考资料:百度百科 - 递归调用
答案:
#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. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
两个错误:
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)以及超级电脑等作业平台。
问题:代码语法错误+逻辑错误。
第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等。
如下以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;
}