c++中的递归

Recursion in c++

本文关键字:递归 c++      更新时间:2023-10-16

再过两天我就要考试了,我的教授给了我们一份有答案的老试卷,但是我把这个问题看了无数遍,我还是不明白这个答案到底是怎么来的。

int recursive (int n) {
    if (n < 10) return n;
    return 100 * recursive (n / 100) + 10 * (n % 10);
}
int main(){
    cout << recursive (19683) << endl;
    return 0;
}

答案应该打印出16030,但我不知道它是如何得到的。我做

100*196+10*3 = 19630

然后我做

100*1+10*3 = 130 
如果有人知道如何得到这个答案

第一个调用(recursive(19683))返回:

100 * recursive(196) + 10*3

第二次调用(recursive(196))返回:

100 * recursive(1) + 10*6

第三次调用(recursive(1))直接返回1。代回去,得到:

100 * (100 * 1 + 60) + 30 = 10000 + 6000 + 30 = 16030

高中的时候,老师教我们如何在桌面检查代码。桌面检查是你手工计算每一步的结果。

int recursive (int n) {
    if (n < 10) return n;
    return 100 * recursive (n / 100) + 10 * (n % 10);
}

通过这个19683

递归(19683)

19683 & lt;10是false

返回100 * recursive(196) + 10 * (19683 % 10 -> 3)


递归(196)

196 & lt;10是false

返回100 *递归(1)+ 10 * (196% 10 -> 6)


递归(1)

1 & lt;10为真,返回1


将递归式(1)= 1代入先前的方程…

返回100 * 1 * 60 -> 160

将递归式(196)= 160代入前面的方程…

返回100 * 160 + 10 * 3 -> 16030

recursive(19683) = 100 * recursive(196) + 10 * 3

recursive(196) = 100 * recursive(1) + 10 * 6

recursive(1) = 1

现在填回答案

recursive(196) = 100 + 60

recursive(19683) = 100 * 160 + 30 = 160

为了理解发生了什么,看一个更简单的递归示例,例如反转字符串。在这个问题的答案中有一个很好的解释递归是如何工作的:-

使用递归

反转字符串

一旦你明白了,你应该会发现理解你所提出的示例问题要容易得多。