C语言小问题:关于全局变量和递归 :题目是用递归来求m的n次方,用尽量少的相乘的次数来解决,下面是代码

2024-12-23 11:24:36
推荐回答(5个)
回答1:

1.int newpow(int m,int n);//求m的n次方
这个是你的注释把;
你真正的调用在printf把。
2.printf("The reslut is :%d\nThe count is :%d",newpow(m,n),count);//为什么这里的count只会输出
printf规则,先count,在newpow(m,n),所以你没调用newpow,所以count=0;

回答2:

我这里是Linux环境
没有conio.h库
这个库貌似是TC自己的,而且只适用于Win平台
但仅仅看代码而言
你貌似从来没给count赋过初值
初始化的时候改成“int count = 0;”试试

回答3:

printf根据编译器不同执行方式不同,你的编译器应该是默认从右到左执行的,先输出了count然后再输出了newpow(m,n),所以每次输出的count是系统自动赋初值的0,而不是你要的执行newpow(m,n)之后的count值;

回答4:

#include 

#include 

int count = 0;

int newpow(int m,int n,int *count)

{

 ++*count;

 printf("\n%d\n",*count);

 if(n==1)

  return m;

 if(n%2!=0)

  return m*newpow(m,n-1,count);

 return newpow(m,n/2,count)*newpow(m,n/2,count);

}

int main()

{

 int newpow(int m,int n,int *count);//求m的n次方

 int m=0,n=0;

 printf("Please input m and n:");

 scanf("%d%d",&m,&n);

 printf("The count is :%d\nThe reslut is :%d\n",count,newpow(m,n,&count));//为什么这里的count只会输出0???

system("pause");

}

错在全局变量和局部变量的模糊不清。上面代码就可以解决问题。

回答5:

如果用步调就会看到结果。