我不明白的c ++递归

时间:2016-11-06 11:17:51

标签: c++ recursion

我不明白为什么在输入5时会返回5? 每次函数可以减法时它返回1吗?然后添加所有那些?

#include <iostream>
using namespace std;
int Fibonacci(int);
int Fibonacci(int x)
{
    if (x == 0) return 0;  // Stopping conditions
    if (x == 1) return 1;
    return Fibonacci(x - 1) + Fibonacci(x - 2);
}
int main() {
    int num;
    cin >> num;
    cout << Fibonacci(num) << endl;
    return 0;
}

2 个答案:

答案 0 :(得分:1)

为清楚起见,使用函数

auto F( int x )
    -> int
{ return (x <= 1? x : F(x-2)+F(x-1)); }

F(5)
→F(3)+ F(4)
→(F(1)+ F(2))+ F(4)
→(1 + F(2))+ F(4)
→(1 +(F(0)+ F(1)))+ F(4)
→(1 +(0 + F(1)))+ F(4)
→(1 +(0 + 1))+ F(4)
→(1 + 1)+ F(4)
→2 + F(4)
→2 +(F(2)+ F(3))
等等...

答案 1 :(得分:0)

0,1,1,2,3,5是计算得到5的值。当被要求任何元素但前两个(这里索引为子0和子1)时,它会添加前两个元素(那些减法是序列的索引,而不是值)。子零设置为0,子参数设置为1。