需要帮助来了解C ++中的递归

时间:2019-09-26 17:09:35

标签: c++

有人可以向我解释为什么输出为6吗? return refun(a-1,b-1)*a;行是什么意思?

代码如下:

#include <iostream>
using namespace std;

long refun(int a, int b) {
    if (a >= 0 && b == 0)
        return 1;
    else if (a == 0 && b>0)
        return 0;
    else
        return refun(a - 1, b - 1)*a;
}

int main()
{
    int x = 3, y = 2;
    long z = refun(x, y);
    cout << z;
    return 0;
}

2 个答案:

答案 0 :(得分:3)

  

此行return refun(a-1,b-1)*a;的含义

返回语句return expr退出函数,并将表达式的值返回给调用者。

refun是函数的名称,因此refun(argument, list)调用函数,参数列表中表达式的结果将作为参数传递到函数中。 -是减法运算符,*是您在学校时应该熟悉的乘法运算符。

由于refun自称,所以它是递归的。

答案 1 :(得分:1)

返回拒绝(a-1,b-1)* a;

有一个使用refun()的递归调用,返回的结果乘以变量'a'。

递归函数使用一种称为“调用栈”的东西。当程序调用函数时,该函数位于调用栈的顶部。

使用它进行空运行,您很容易得到6。