关于递归

递归说起来很简单,就在自己调用自己。可是尾递归还好,但是也不简单,下面是实现1+.......+n的代码

#include<iostream>
using namespace std;
int add_recursion(int n);
int add_circle(int n);
int sum_circle=0,sum_recursion=0;
void main()
{

int a=add_circle(100);
int b=add_recursion(100);
cout<<"circle "<<a<<endl;
cout<<"recursion "<<b<<endl;




}

int add_circle(int n)
{
	for(int i=0;i<=n;i++)
		sum_circle+=i;
	return sum_circle;
}

int add_recursion(int n)
{
	int ans;
  if(n>0)
	  ans= n+add_recursion(n-1);
  else
	  ans=0;
  return ans;

#if 0
	if(n=0)
		ans= 0;
	else if(n=1)
		ans= 1;
	else
		ans= n+add_recursion(n-1);
	return ans;
#endif
}

我自己一开始写的是if0 当中的语句,可是执行下来就是为1,感觉逻辑上通啊,然后模仿书上写阶乘的代码写的就可以,不知道为什么我自己写的就是只输出1,有时间再看。后面再补充些好的递归的例子

注:再次编辑:我晚上把问题发到群里咨询了,早上看到的时候有人回复说if(n=0)是赋值语句!!!我顿悟!!我想我犯了最简单的错误,之前在书上看到说把n==0写成n=0,我还在想我肯定不会,这么简单。。。所以不要轻视书上写的每一句话,同时也要不断的自己敲代码,自己思考,自己总结积累。纸上得来终觉浅


下面再给出一个例子:编写函数将一个整数转换为二进制形式

#include<iostream>
using namespace std;
void to_binary(int n);
void main()
{
	int n;
	cout<<"please enter a num\n";
   cin>>n;
   to_binary(n);
   

}
void to_binary(int n)
{
	int r;
	r=n%2;
	if(n>=2)
	to_binary(n/2);
	
	
	putchar('0'+r);
	return;

}
代码虽简单,可是里面很有学问,值得研究


你可能感兴趣的:(编程,递归)