2017-02-20 25 views
1

我是新来的c + +,我试图做一个计算器。我设计了这个功能得到了一些阶乘的目的:EXC_BAD_ACCESS在简单的c + + XCODE程序

 int factorial(int num1) { 
    int sum; 
    if (num1 == 1) { 
     sum = 1; 
    } 
    else { 
     sum = factorial((num1 - 1) * num1); 
    } 

    return sum; 
} 

每当我试着编译这一点,但是,我上

int factorial(int num1) 

任何想法发生了什么错误EXC_BAD_ACCESS?我正在使用XCODE。

+0

我怀疑编译器崩溃,而我认为它是你的程序崩溃,当你试图运行它。但除非我们有[最小,完整和可验证示例](http://stackoverflow.com/help/mcve),否则我们不能说太多。请编辑您的问题以包含该问题,最重要的是您如何*调用函数(而不是声明它)。如果您阅读输入内容,那么还包括您提供的实际输入内容。或者尝试通过在调试器中运行你的程序来解决它。 –

+2

但是,如果您通过例如'2'到函数中,你将有*无限递归*。您可以使用调试器来找出原因。 –

回答

1

只要num1不是1,您的定义就会导致无限递归。

自己做一下数学计算:

factorial(2) 
= factorial((2-1) * 2) 
= factorial(2) 
= factorial((2-1) * 2) 
= ... 

factorial(3) 
= factorial((3-1) * 3) 
= factorial(6) 
= factorial((6-1) * 6) 
= factorial(30) 
= ... 

阶乘函数的递归定义是不

factorial(n) = factorial((n - 1) * n) 

factorial(n) = n * factorial(n - 1) 

(而阶乘不是一个总和,而是一个产品。)