以下C++程序的输出
Output of the following C++ Program
嗨,我有这个基本的代码练习,c ++程序的代码是:
#include <iostream>
#include <string>
int func(int x){
if ( x==0)
return 2;
else if ( x==1)
return 3;
else
return (func(x-1)+func(x-2));
}
int main()
{
std::cout<<func(5)<<std::endl;
return 0;
}
我已经编译并运行了这段代码。输出为 21。
但我不明白输出是如何得出的 21 有人可以解释一下。
它的工作原理与这个非递归翻译完全相同:
int func_0() { return 2; }
int func_1() { return 3; }
int func_2() { return func_1() + func_0(); } // Returns 3 + 2 = 5
int func_3() { return func_2() + func_1(); } // Returns 5 + 3 = 8
int func_4() { return func_3() + func_2(); } // Returns 8 + 5 = 13
int func_5() { return func_4() + func_3(); } // Returns 13 + 8 = 21
int main()
{
std::cout << func_5() << std::endl;
}
您可以通过手动执行每个步骤来预测输出。在您的情况下,每个func
调用的工作方式类似于以下图表:
func(5)
+
+--+ func(4)
| +
| +--+ func(3)
| | +
| | +--+ func(2)
| | | +
| | | +--+ func(1) = 3
| | | |
| | | +--+ func(0) = 2
| | |
| | +--+ func(1) = 3
| |
| +--+ func(2)
| +
| +--+ func(1) = 3
| |
| +--+ func(0) = 2
|
+--+ func(3)
+
+--+ func(2)
| +
| +--+ func(1) = 3
| |
| +--+ func(0) = 2
|
+--+ func(1) = 3
+-----------+
21
由于代码非常小,因此可以通过物理遍历程序来预测输出,也可以使用调试器单步执行。
主要 是程序的入口点;所以你应该从第一行开始是std::count<<funct(5)<<std::end1;
.
输入初始参数 x 为 5 的func(int x)
方法。此函数查看参数,如果 x 为 0 或 1,则分别返回 2 或 3。否则,它将递归调用自己,返回func(x-1)
和func(x-2)
的总和。
单步执行将获得以下执行顺序:
func(5)
func(4)
func(3)
func(2)
func(1)
return 3
func(0)
return 2
func(1)
return 3
func(2)
func(1)
return 3
func(0)
return 2
func(3)
func(2)
func(1)
return 3
func(0)
return 2
func(1)
return 3
Which translates to -> 3 + 2 + 3 + 3 + 2 + 3 + 2 + 3 = 21
如果你不太熟悉编程中的递归,这个概念应该已经模糊地熟悉了。你几乎肯定遇到过 斐波那契数列,其中序列中的下一个数字是前两个数字的总和(序列的前两个数字定义为 0 和 1)。您介绍的程序与斐波那契数列非常相似,但是,它使用 2 和 3 作为前两个数字。
因此,如果将递归序列定义为a0 = 2, a1 = 3
,则an = an-1 + an-2
,它看起来与定义的函数非常相似。
它是递归,所以我像这样运行
函数用 5 调用
func(4) + func(3)
func(3) + func(2) + func(2) + 3
func(2) + func(1) + func(1) + func(0) + func(1) + func(0) + 3
func(1) + func(0) + 3 + 3 + 2 + 3 + 2 + 3
2 + 3 + 16
21
相关文章:
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 显示错误输出的简单数组排序程序
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 如何从Windows应用程序输出到标准?
- 我写了一个C++程序来模拟Enigma机器.我没有得到输出
- 如何使用C++读取另一个程序中的源代码输出
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 为什么这个程序的输出不如预期
- 在由Sublime文本3编译后在cmd上显示Java程序输出
- C++ 每次运行程序时我都会"nan"输出的问题
- 如何从 Win32 C++ 应用程序输出到父控制台窗口?
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 而循环:简单的除法程序输出零,不明白为什么
- 如何在 html 页面中插入 cgi 应用程序的输出?
- C 中的输出程序无明显的原因是白色的
- C++:更改简单输出程序的字体
- C++ 简单的输入/输出程序 + 枚举器
- C++字母等效数字代码输出程序
- 编译输出程序集