我试图通过C ++ Primer Plus书中的以下练习来解决。
定义一个递归函数,该函数接受一个整数参数并返回该参数的阶乘。回想3阶乘,写3!,等于3×2!,依此类推,0!定义为1.一般来说,如果n大于零,n! = n *(n - 1)!在使用循环的程序中测试您的函数,以允许用户输入程序报告阶乘的各种值。
我编写了进入main()的代码。
#include <iostream>
using namespace std;
int factorial(int n);
int main()
{
int number= 0;
cout<<"Enter a number(0 to quit): ";
while (cin >> number && number! = 0)
{
cout<< "Here is the factorial of the number: "<< factorial (number) << ". \n"
"Enter next number(0 to quit): ";
}
return 0;
}
现在我想不出一个正确的递归函数声明。有人可以通过编写最简单的(编程新手)来掌握本练习的函数声明吗?
在设计递归算法来计算任何数的阶乘时,我们必须首先确定基本情况,这是我们可以在没有递归的情况下解决的计算的一部分。那就是n = 0
然后factorial(n) = 1
的情况。
这说明当n
is等于0时如何解决问题,但是当n
大于0时我们该怎么办?这是递归的情况,或者我们使用递归来解决的问题的一部分。 If n > 0, then factorial(n) = n * factorial(n-1)
。这表明如果n大于0,则n的阶乘是n-1
的阶乘的n倍。
int factorial(int n)
{
if (n == 0)
return 1; // base case
else
return n * factorial(n-1); // recursive case
}
我会做一些事情:
int factorial(int n){
if(n<=0)
return 1;
int num=factorial(n-1);
if(num)
return n*num;
return 0;
}
您可以使用如下的非常短的功能,但它与@superPhreshHackerKid提供的答案相同
int factorial(int n){
if (n > 0)
return n * factorial(n-1);
return 1;
}
希望能帮助到你