不用函数如何写递归?

具体原理就是用多层数据代替栈堆,循环实现函数调用。
步骤是:
1,先实现对应递归函数
2,定义足够多层的数据,其中
数据类型{
    对应递归函数的输入数据;
    对应递归函数的输出数据;
    运行步之间有联系的数据;
};
3,循环实现对应递归函数每一步,其中
对应递归函数的调用=跳进下一层数据,从第一步
对应递归函数的返回=没有上一层?结束循环:(返回上一层数据,从下一步开始);
下面是3个具体实例的图解:

 

 

char*utoa(char*a,u32 u,u32 r){
	u32 div=u/r;
	if(div)a=utoa(a,div,r);

	u32 mod=u%r;
	char*b=a;
	*b++=mod<10?mod+'0':mod-10+'a';
	*b=0;
	return b;

}
int main(){
	{
		char a[100]={};
		utoa(a,12345,10);
		outs(a);
	}
	struct lt{
		int i;
		char*a,*b;
		u32 u,r;
		void init(char*a,u32 u,u32 r){
			this->a=a;
			this->u=u;
			this->r=r;
			i=0;
		}
		lt*run(lt*la){
			int ii=0;

			if(i==ii++){
				u32 div=u/r;
				if(div){
					lt&l=this[+1];
					l.init(a,div,r);
					return &l;
				}else{
					i+=2;
				}
				return this;
			}
			if(i==ii++){
				a=this[+1].b;
				i++;
				return this;
			}

			if(i==ii++){
				u32 mod=u%r;
				b=a;
				*b++=mod<10?mod+'0':mod-10+'a';
				*b=0;
				if(this==la)return 0;
				lt&l=this[-1];
				l.i++;
				return &l;
			}

		}
	}la[100];
	
	lt*l=la;
	char a[100]={};
	l->init(a,0x1a2b3c4d,16);
	while(l=l->run(la));


	outs(a);
	return 0;
}

 


void nabc(int n,char a='a',char b='b',char c='c'){
	if(n>1)nabc(n-1,a,c,b);
	if(n>0)printf("%8i:%c->%c\n",n,a,c);
	if(n>1)nabc(n-1,b,a,c);
}
int main(){
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值