在BASIC下实现递归
来源:互联网 发布:巨潮资讯app网络错误 编辑:程序博客网 时间:2024/05/18 01:46
很久以前我在CSDN上看到一篇文章,是讲在C下实现面向对象的,写的很经典,但是当时我还没有能力看懂那篇文章。但是它依然给了我很多启发-----真正的高手是不会也不应该受一门语言的限制的!高手可以在C下实现类,当然也应该在BASIC下实现递归----(是在夸我自己呢)。这个程序是在GVBASIC下运行的。这是我最开始学习的一门编程语言--在这之前学校里教过QBASIC,可惜我没有认真学---后来突然对在文曲星上写程序产生了兴趣,又把那本QBASIC书拿出来看~~~
后来我用GVBASIC在文曲星上写一个游戏,那个时候就让我感受到:一门语言好的语法能够决定你写程序的难易程度---这是对初学者而言,对于高手,这些就根本不存在~~~当我学了C以后,我再在文曲星上用GVBASIC的时候,我发现我开始遵循结构化的程序设计,它使的我非常轻松!
对于递归,一直以来我都会用循环去代替它--也许是因为我是从BASIC开始的,所以感觉上对于递归不怎么喜欢。但是当我接触到越来越多的算法的时候,我发现递归是如此的重要!
于是我利用栈数据结构以及在C下函数调用的原理,在BASIC下实现了模拟递归!这个过程花费了我一个小时的时间!除此以外,由于在BASIC下没有指针的概念(在GVBASIC下也没有分配内存的一些函数--在VB下可以用一些API函数来分配内存而实现指针),所以链表也无法使用,但是我们也可以模拟出来~---当然对于这个例子而言,这个模拟过程又要复杂一些!
以下是代码:
PRINTT "在BASIC下实现递归"
PRINTT "一个求阶乘的例子"
PRINT "Kevin Lynx 2006.1.3"
REM int GetN(int n)
REM {
REM if(n==1) return 1;
REM return n*GetN(n-1);
REM }
P=-1
SIZE=255
DIME S(SIZE)
GOTO 250
REM push stack sub
P=P+1
IF P>254 THEN PRINT "栈溢出":END
S(P)=PARAM
RETURN
REM pop stack sub
IF P<0 THEN 230
PARAM=S(P)
P=P-1
230:
RETURN
250:
PRINT "输入一个正整数";
INPUT "";N
IF N<1 THEN 250
GOUSB 310
GOTO 440
300:
REM GetN
310:
IF N=1 THEN 390
REM before call itself ,push stack first
PARAM=N
GOSUB 140
REM and now can call itself
N=N-1
GOSUB 310
REM pop stack now
GOSUB 200
N=N*PARAM
PARAM=1
REM return now
RETURN
440:
PRINT "Result=";N
后来我用GVBASIC在文曲星上写一个游戏,那个时候就让我感受到:一门语言好的语法能够决定你写程序的难易程度---这是对初学者而言,对于高手,这些就根本不存在~~~当我学了C以后,我再在文曲星上用GVBASIC的时候,我发现我开始遵循结构化的程序设计,它使的我非常轻松!
对于递归,一直以来我都会用循环去代替它--也许是因为我是从BASIC开始的,所以感觉上对于递归不怎么喜欢。但是当我接触到越来越多的算法的时候,我发现递归是如此的重要!
于是我利用栈数据结构以及在C下函数调用的原理,在BASIC下实现了模拟递归!这个过程花费了我一个小时的时间!除此以外,由于在BASIC下没有指针的概念(在GVBASIC下也没有分配内存的一些函数--在VB下可以用一些API函数来分配内存而实现指针),所以链表也无法使用,但是我们也可以模拟出来~---当然对于这个例子而言,这个模拟过程又要复杂一些!
以下是代码:
PRINTT "在BASIC下实现递归"
PRINTT "一个求阶乘的例子"
PRINT "Kevin Lynx 2006.1.3"
REM int GetN(int n)
REM {
REM if(n==1) return 1;
REM return n*GetN(n-1);
REM }
P=-1
SIZE=255
DIME S(SIZE)
GOTO 250
REM push stack sub
P=P+1
IF P>254 THEN PRINT "栈溢出":END
S(P)=PARAM
RETURN
REM pop stack sub
IF P<0 THEN 230
PARAM=S(P)
P=P-1
230:
RETURN
250:
PRINT "输入一个正整数";
INPUT "";N
IF N<1 THEN 250
GOUSB 310
GOTO 440
300:
REM GetN
310:
IF N=1 THEN 390
REM before call itself ,push stack first
PARAM=N
GOSUB 140
REM and now can call itself
N=N-1
GOSUB 310
REM pop stack now
GOSUB 200
N=N*PARAM
PARAM=1
REM return now
RETURN
440:
PRINT "Result=";N
- 在BASIC下实现递归
- basic stamp里SHIFTIN在avr下的替代实现
- 基本身份验证(HTTP Basic Authentication)及在Ruby on Rails下的实现
- 用Visial Basic 在菜单栏实现超链接
- 用Visial Basic 在菜单栏实现超链接
- 在linux下用C语言实现递归查看某个目录中的所有文件
- 在Yii框架下用递归方式简单实现无限极分类
- C语言如何在不定义函数的情况下实现递归
- Visual Basic 2008在Windows Vista下调用Aero效果
- 在 Visual Basic .NET 中实现后台进程
- 在 Visual Basic 中实现业务层服务器
- 在 Visual Basic .NET 中实现后台进程
- 如何在 Visual Basic 控件中实现 IObjectSafety
- Leetcode Basic Calculator 递归解法
- java的api操作HDFS实现递归打印目录并实现在Linux下的显示效果
- 如何在Hive中实现递归计算
- 尾递归以及在浏览器中的实现
- 在 XSLT 中用递归实现循环
- 网页设计中的颜色
- 痛并快乐着 男人最该去的49个地方
- 用AJAX开发智能Web应用程序之高级篇
- 100美元笔记本06年上市 中国分配到100万台
- 父母,我们一辈子值得感激的人
- 在BASIC下实现递归
- 新年,却没有感觉
- [转]几种典型程序Button处理代码的定位 by jingulong 2006-01-04,15:33
- 用对话框创建CDialogBar派生的类并在CReBar上添加
- 在各个地方显示本地的天气
- 关于指针
- myfirst
- 《代码大全》用数据说话:关于子程序的最佳长度
- 结合Direct Web Remoting使用AJAX