首页 > 试题广场 >

定义一个递归函数,接受一个整数参数,并返回该参数的阶乘。前面

[问答题]
定义一个递归函数,接受一个整数参数,并返回该参数的阶乘。前面讲过,3的阶乘写作3!,等于3*2!,依此类推:而0!被定义为1。通用的计算公式是,如果n大于零,则n!=n* (n-1) !。在程序中对该函数进行测试,程序使用循环让用户输入不同的值,程序 将报告这些值的阶乘。
// 递归的两种方式
// 从下到上,从上到下
// 前者定义的变量会销毁,节省内存空间
// 后者函数在定义的时候回开辟函数栈,用来保存函数的局部变量、参数、上一个栈的指针、返回值等信息,
// 当函数调用结束后会销毁。递归函数会一直递归下去,上层的函数栈一直不会销毁,直到递归结束,全部退出。
#include <iostream>
int Recursive (int n);
int RecursiveBTT (int n, int result);
int main(int argc, char const *argv[])
{
    std::cout << Recursive(4) << std::endl;
    std::cout << RecursiveBTT(4, 1) << std::endl;
    return 0;
}
// 从上到下
int Recursive (int n) 
{
    if (n <= 1) 
    {
        return 1;
    } else 
    {
        return n * Recursive(n-1);
    }
    
}
// 从下到上, 把最高层的结果写到下一个方法中,cpu会复用栈, 消耗的内存空间更小,效率更高
int RecursiveBTT (int n, int result) 
{
    if (n <= 1) 
    {
        return result;
    } else 
    {
        return RecursiveBTT(n-1, n * result);
    }
}
发表于 2020-03-11 11:55:48 回复(0)