特殊的递归问题

例题:
从键盘输入一个正整数,利用递归法打印输出这个数。
答案如下:

#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的,最后是不能得到预期的值,如果自己写了长代码,在你发现错误前或者几乎找不出,我想你也会是很崩溃!
以上纯属个人的理解,要是有错误敬请各位帮忙纠正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值