我编写这个程序是为了使用递归得到 i 的值,该值暴露于 j 的幂中。作为一名学生,练习解决同一问题的不同方法可能对我有益。代码背后的逻辑工作正常,但是当使用负幂时,函数
np()
返回 1.#QUAN0
而不是实际值。我不明白为什么会发生这种情况。
PS:这段带负电的代码在我学长的笔记本电脑上运行良好。
#include<stdio.h>
int pp(int i, int j,int m)
{
if(j==0){
return m;
}
else{
m*=i;
pp(i,j-1,m);
}
}
float np(float i,int j,float m){
if(j==0){
return m;
}
else{
m*=(1/i);
np(i,j+1,m);
}
}
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));
}
}
这段带有负功率的代码在我学长的笔记本电脑上运行良好。
我不知道你所说的“高级”是什么意思,但不,事实并非如此。不可以。
以下代码:
m*=(1/i);
可以简单地写为:
m *= 1 / i;
将
1
(整数)除以 i
(也是整数)。这将 始终 给出 0
,无论 i
的值是多少。当然,不用说,将 m
乘以零将始终得到零。