返回factorial C ++的递归函数

问题描述 投票:-3回答:3

我试图通过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;
}

现在我想不出一个正确的递归函数声明。有人可以通过编写最简单的(编程新手)来掌握本练习的函数声明吗?

c++ function recursion factorial
3个回答
1
投票

在设计递归算法来计算任何数的阶乘时,我们必须首先确定基本情况,这是我们可以在没有递归的情况下解决的计算的一部分。那就是n = 0然后factorial(n) = 1的情况。

这说明当nis等于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
}

0
投票

我会做一些事情:

int factorial(int n){
  if(n<=0)
    return 1;
  int num=factorial(n-1);
  if(num)
    return n*num;
  return 0;
}

0
投票

您可以使用如下的非常短的功能,但它与@superPhreshHackerKid提供的答案相同

int factorial(int n){
    if (n > 0)
        return n * factorial(n-1);
    return 1;
}

希望能帮助到你

© www.soinside.com 2019 - 2024. All rights reserved.