递归函数

类型和程序设计语言

我的梦境 提交于 2019-11-27 19:10:20
编程语言的类型系统为何如此重要? - 知乎 https://www.zhihu.com/question/23434097/answer/43057230 《类型和程序设计语言》.pdf - 免费高速下载 - 皮皮盘-收入最高的网盘 当前标签:简单易懂的程序语言入门小册子 当前标签:简单易懂的程序语言入门小册子 简单易懂的程序语言入门小册子(9):环境,引入环境 古霜卡比 2014-05-16 05:46 阅读:793 评论:2 简单易懂的程序语言入门小册子(8):基于文本替换的解释器,小结 古霜卡比 2014-05-08 08:55 阅读:883 评论:5 简单易懂的程序语言入门小册子(7):基于文本替换的解释器,加入continuation,重构解释器 古霜卡比 2014-05-03 10:27 阅读:643 评论:0 简单易懂的程序语言入门小册子(1.5):基于文本替换的解释器,递归定义与lambda演算的一些额外说明 古霜卡比 2014-05-02 11:41 阅读:753 评论:0 简单易懂的程序语言入门小册子(6):基于文本替换的解释器,引入continuation 古霜卡比 2014-04-28 11:18 阅读:926 评论:2 简单易懂的程序语言入门小册子(5):基于文本替换的解释器,递归,不动点,fix表达式,letrec表达式 古霜卡比 2014-04-23

关于递归的用法。

守給你的承諾、 提交于 2019-11-27 15:44:13
递归的主要思想是找到相邻两个数字之间的联系。首先找到初始数字。以初始数字的发生为基准,一直向后遍历。 例子: function fn(n){ if(n == 1){ //重点是这一步。找出函数运行的第一步,以第一步为基准。下面的运行依靠第一步来计算。 return 1 }else{ var j=n * fn(n-1) //fn(n-1)这个一直运行,直到运行到为自己输入的那个值。把自己输入的那个值到初始值,一直遍历。直到结束。 return j; } } 来源: https://www.cnblogs.com/hy96/p/11368887.html

Python之路10-递归调用解压zip包或rar包

元气小坏坏 提交于 2019-11-27 10:10:16
不知道有没有小伙伴跟我一样犯这样的懒,一些简单重复的工作,总是嫌麻烦,懒得一步步去做,还每次都重复一样的操作。比如解压zip或rar的包,也许你会说,不就解压嘛,有啥的。问题来了,如果只是一个简单的压缩包也是算了,关键是压缩包里还有压缩包,也不知道多少层,要一层层去解压,这就比较恶心了吧?如下图: 学习了Python的递归调用后,心想,为什么我不写一个脚本自动解压所有的压缩包呢?emmm....心动不如行动,说写就写,谁让我是这么懒的一个人呢,连解压都得自动化,哈哈哈。 那就来吧,先从最简单的开始,搞个zip包用命令行解压看看: # -*- coding: utf-8 -*- import zipfile import os path = r'C:\Users\ES-IT-PC-193\Desktop\aa\A.zip' z = zipfile.ZipFile(path, 'r') unzip_path = os.path.split(path)[0] #解压路径 z.extractall(path=unzip_path) 嗯,试了试,没问题,能正常解压。那接下来就是解决如果把压缩包里包含压缩包的也一块解压了,那我得把解压的命令封装成函数,然后循环解压就好了。这里正好用上了刚学不久的递归调用。 # -*- coding: utf-8 -*- # 2019/8/13 14:57

Ackerman函数的非递归表示

断了今生、忘了曾经 提交于 2019-11-27 00:31:58
/************************************************************************/ /* akm={ n+1 m=0 */ /* akm(m-1,1) m!=0,n=0 */ /* akm(m-1,akm(m,n-1)) m!=0,n1=0 */ /* Ackerman函数 */ /* nflag其实可以不用存在,本意想让其标志是否向下传递top的f给top-1的n,其实每一步都需要传递,所以不需要存在*/ /************************************************************************/ #include <stdio.h> const int MaxSize=100; struct { int f; int m; int n; int flag;//1表示函数值没有计算出来 int nflag;//1标志n是需要重新计算(是否需要向下求值) }st[MaxSize]; int top=-1; int ackerman(int m,int n) { top++; st[top].m=m; st[top].n=n; st[top].flag=1; st[top].nflag=0; while(top>-1) { if (st[top].flag==1)

C++ 递归调用遍历目录树 Windows API【转】

守給你的承諾、 提交于 2019-11-26 18:32:48
原文:http://www.cnblogs.com/lailx/archive/2011/11/20/2256380.htm l #include <windows.h> #include <stdio.h> /* 预处理申明 */ //#pragma comment (lib, "User32.lib") /* 函数申明 */ DWORD ListAllFileInDrectory(LPSTR szPath); /* 全局变量 */ //记录所有的文件和目录数 DWORD dwTotalFileNum = 0; /* ************************************ * DWORD ListAllFileInDrectory(LPSTR szPath) * 功能 遍历目录及所有子目录,打印路径 * * 参数 LPTSTR szPath,为需遍历的目录 * * 返回值 0代表执行完成,1代码发生错误 **************************************/ DWORD ListAllFileInDrectory(LPSTR szPath) { CHAR szFilePath[MAX_PATH]; WIN32_FIND_DATA FindFileData; HANDLE hListFile; CHAR szFullPath[MAX

递归调用

跟風遠走 提交于 2019-11-26 17:44:40
递归列举 printd(123)时,第一次调用printd的参数n = 123.它把12传递给printd的第二次调用,后者 又把1传递给printd的第三次调用。第三次调用printd时首先将打印1,然后再返回到第二次调 用。从第三次调用返回后的第二次调用同样也将先打印2,然后再返回到第一次调用。返回到 第一次调用时将打3,随之结束函数的执行。 void printd(int n) {    if (n < 0)   {     putchar('-');     n = -n;   }    if (n / 10)   printd(n / 10);   putchar(n % 10 + '0'); } 举123为例子 int strcmp(char *s , char *t) {   int i;    for (i = 0 ; s[i] == t[i] ; i++)   return 0;    return s[i] - t[i]; } 原型声明: extern char *strcpy(char *dest , const char *src); 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间容纳src的字符串。 返回指向dest的指针。 int

递归

有些话、适合烂在心里 提交于 2019-11-26 15:57:45
问题一: 输入正整数n,例如n=4 返回 4+3+2+1 也就是10 def rec_sum(n): if n == 1: return 1 else: return n + rec_sum(n-1) rec_sum(6) 21 问题二: 输入正整数n,例如4321 返回4+3+2+1 也就是10 def sum_func(n): if (n < 10): return n else: return n%10 + sum_func(n//10) sum_func(4321) 10 问题三: 输入 短语字符串 和 单词列表 将字符串分割并转换为 出现的单词列表 例如: 字符串为’ilovedogsJohn’ 备选单词列表为 ‘i’ ‘am’ ‘a’ ‘dogs’ ‘lover’ ‘love’ ‘John’ 返回答案:‘i’ ‘love’ ‘dogs’ ‘John’ phrase = 'ilovedogsJohn' list_of_words = ['i', 'am', 'a', 'dogs', 'lover', 'love', 'John'] #这段代码暂时只能匹配完全分割的字符串,对于部分分割还存在问题, #而且对于单词列表中出现的,例如dogs,如果单词列表中有单词do,也会匹配出来 def word_split(phrase, list_of_words, output

线段树

北城余情 提交于 2019-11-26 11:09:45
区间线段树: const int MAXM=100000; int a[MAXM+5]; ll st[(MAXM<<2)+5],lazy[(MAXM<<2)+5]; inline void push_up(int o) { st[o]=st[o<<1]+st[o<<1|1]; } inline void push_down(int o,int l,int r) { if(lazy[o]) { lazy[o<<1]+=lazy[o]; lazy[o<<1|1]+=lazy[o]; int m=(l+r)>>1; st[o<<1]+=lazy[o]*(m-l+1); st[o<<1|1]+=lazy[o]*(r-m); lazy[o]=0; } } void build(int o,int l,int r) { if(l==r) st[o]=a[l]; else { int m=(l+r)>>1; build(o<<1,l,m); build(o<<1|1,m+1,r); push_up(o); } lazy[o]=0; } void update(int o,int l,int r,int a,int b,ll v) { if(a<=l&&r<=b) { lazy[o]+=v; st[o]+=v*(r-l+1); return; } else { push_down(o,l,r);