例题:
从键盘输入一个正整数,利用递归法打印输出这个数。
答案如下:
#include<iostream>
using namespace std;
int main()
{
void f(int x);
int x;
cout << "please input a integer:";
cin >> x;
f(x);
}
void f(int x)
{
if (x >= 10)
f(x / 10);
cout << x % 10;
}
说明:
第11行至第16行是一种特殊的递归函数,特殊之处就在于少了基准条件。
接下来我们分析它的处理过程:
如果输入的数小于10,则会直接输出当前数。
相反如果输出的数大于10,会递归执行函数,即反复执行语句“ f(x/10)”,它的执行过程是这样的,(我们先假设输入的值为987),则程序反复调用的过程如下:f(987)—>f(98)—>f(9),而“cout<<x%10;”语句,则是先从f(9)开始一直执行到f(987)结束。
另外给大家说明一下我今天下午敲代码遇到的低级坑,竟然让我甚是崩溃,思前思后找Bug.
大家看一下。
a=1/2*(b+c)
a=(b+c)/2
乍一看两者结果是相同的,但大家请不要忘了,1/2的结果是为0的,最后是不能得到预期的值,如果自己写了长代码,在你发现错误前或者几乎找不出,我想你也会是很崩溃!
以上纯属个人的理解,要是有错误敬请各位帮忙纠正。