博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归与非递归转换(栈知识应用)
阅读量:4639 次
发布时间:2019-06-09

本文共 705 字,大约阅读时间需要 2 分钟。

下面例题是一次作业中遇到的,很值得体味,与大家共享下。

 递归代码:

1 long f(long m,long n)2 {3     long sum;4     if(m==0) sum=n+1;5     else if(n==0) sum=f(m-1,1);6     else k=f(m-1,f(m,n-1));7 return sum;8 }

 

 用递归来做很明了,当我们明白了递归所走的整个流程后,下面我们用栈来实现非递归的转换。

 非递归代码:

 

long f(long m,long n){  listStack
k; //用链栈来实现 k.push(m); k.push(n); long sum; while(k.length()!=1) //栈中只有一个元素时退出循环 { n=k.pop(); //出栈 m=k.pop(); if(m==0) k.push(n+1); else if(n==0) { k.push(m-1); n=1; k.push(n); } else { k.push(m-1); k.push(m); k.push(n-1); } } sum=k.pop(); return sum;}

转载于:https://www.cnblogs.com/yunxianli/archive/2011/11/07/4111970.html

你可能感兴趣的文章
MyBatis启动:MapperStatement创建
查看>>
【 全干货 】5 分钟带你看懂 Docker !
查看>>
[转]优化Flash性能
查看>>
popStar手机游戏机机对战程序
查看>>
Java Web项目结构
查看>>
lambda表达式树
查看>>
OpenCV YUV 与 RGB的互转(草稿)
查看>>
二次注入原理及防御
查看>>
会话记住已登录功能
查看>>
Linux内核分析——可执行程序的装载
查看>>
儿子和女儿——解释器和编译器的区别与联系
查看>>
第一阶段冲刺3
查看>>
父类引用指向子类对象
查看>>
网页如何实现下载功能
查看>>
IT男专用表白程序
查看>>
读《大道至简》第六章感想
查看>>
ef linq 中判断实体中是否包含某集合
查看>>
章三 链表
查看>>
Solution for Concurrent number of AOS' for this application exceeds the licensed number
查看>>
CSE 3100 Systems Programming
查看>>