打印一个整数的次方幂 程序运行错误 请各位看完后解释一下 谢谢

Mike.hjxs 发布于 2011/10/19 10:56
阅读 260
收藏 0

我编的程序如下

#include<stdio.h>
int power(base,exponent);

int main()
{
    int a,b;
    printf("请输入两个整数:",a,b);
    scanf("%d%d",&a,&b);
    printf("a的b次方幂的形式为:",power(a,b));
    return 0;

}
    int power(base,exponent)
    {
        int i=exponent;
        if(i<=1)
        return 1;
        else
        return power(base,exponent)*power(base,exponent-1);
    } 

运行的结果为:windows已停止工作    为啥  求解释

加载中
0
xyz555
xyz555
还是学生吧?看了几个楼主的问题想说的是,楼主的学习方法有问题,你应该先查查书找找问题的答案,实在自己搞不定了再问。
Mike.hjxs
Mike.hjxs
嗯 我是一名大二的学生 对函数这块确实挺不清楚的 谢谢你的提醒
0
Grrrr
Grrrr

你写错了,递归里面应该是这样吧:(我估计是栈爆掉导致的)

return base*power(base,exponent-1);

if(exponent == 0) return 1;

0
xyz555
xyz555

引用来自“Grrrr”的答案

你写错了,递归里面应该是这样吧:(我估计是栈爆掉导致的)

return base*power(base,exponent-1);

if(exponent == 0) return 1;

乱说

int power(base,exponent);        // 这个是函数声明吗?

本来就概念不清不要误导。

这个递归可以跳出,但这个函数不是在计算幂。另外printf函数调用也不对。

不知道楼主用的是什么编译器,这样的错误编译器检查不出?

Mike.hjxs
Mike.hjxs
我用的是codeblocks
0
Grrrr
Grrrr

楼上的,自己看不懂别乱说,上面我给出的是伪代码.难道真的需要我把代码完整的写出来吗??

Java:

public int power(base,exponent)

{

if(exponent == 0) return 1;

return base*power(base,exponent-1);

}

Grrrr
Grrrr
是的.楼主的问题我敢100%保证是栈溢出导致的. PS:递归很邪恶,使用须谨慎.....
开心Nemo
开心Nemo
楼上这样就对了。 感觉楼主写的这几个代码到处是递归调用,基本概念都没搞懂啊。
0
xyz555
xyz555

引用来自“Grrrr”的答案

楼上的,自己看不懂别乱说,上面我给出的是伪代码.难道真的需要我把代码完整的写出来吗??

Java:

public int power(base,exponent)

{

if(exponent == 0) return 1;

return base*power(base,exponent-1);

}

第一、“栈爆掉导致的”

是这样吗?怎么会爆掉,楼主的递归调用是可以跳出的。

第二、你给的程序对吗,基本的语法都错了。

public int power(base,exponent)?

第三、你的函数是计算幂的,你确认?

返回顶部
顶部