递归函数

  • 函数内部直接或间接的调用函数自身
  • 将复杂问题简单化

例子程序

  • def sum_digits(n):
    """Return the sum of the digits of positive integer n."""
    if n < 10:
    return n
    else:
    all_but_last, last = n // 10, n % 10
    return sum_digits(all_but_last) + last
  • 各位数字之和问题分解为两个步骤
    • 除了最后一个数字以外所有数字相加
    • 然后加上最后一个数字

相互递归

  • def is_even(n):
    if n == 0:
    reutrn True
    else:
    return is_odd(n-1) def is_odd(n):
    if n == 0:
    return False
    else:
    return is_even(n-1) result = is_even(4)
  • game
  • 一个双人游戏,桌上有n个鹅卵石,每次一个人能从桌子上拿走一个或两个鹅卵石,拿走最后一个鹅卵石的人胜利
    • Alice每次只拿走一个鹅卵石
    • Tom在鹅卵石是偶数的时候拿走两个鹅卵石,反之拿走一个鹅卵石
    • 最终谁会获胜
  • def play_Alice(n):
    if n == 0:
    print("Tom wins!")
    else:
    play_Tom(n-1) def play_Tom(n):
    if n == 0:
    print("Alice wins!")
    elif(n%2 == 0):
    play_Alice(n-2)
    else:
    play_Alice(n-1)

树递归

  • 一个函数调用自己大于一次
  • 例子(斐波那契数列):
    • def Fibo(n):
      if n == 1:
      return 0
      if n == 2:
      return 1
      if n > 2:
      return Fibo(n-2) + Fibo(n-1)
      def count_partitions(n, m):
      """Count the ways to partition n using parts up to m."""
      if n == 0:
      return 1
      elif n < 0:
      return 0
      elif m == 0:
      return 0
      else:
      return count_partitions(n-m, m) + count_partitions(n, m-1)
    • 不断将函数以m为界分段,直到全部分为1

SICP-1.7-递归函数的更多相关文章

  1. SICP 习题 (1.9) 解题总结

    SICP 习题 1.9 开始针对“迭代计算过程”和“递归计算过程”,有关迭代计算过程和递归计算过程的内容在书中的1.2.1节有详细讨论,要完成习题1.9,必须完全吃透1.2.1节的内容,不然的话,即使 ...

  2. [SICP] 求值规则

    在Java语言学习中,通常不太关注求值规则. (2+4*6)*(3+5+7)这样的组合式的求值规则.通常归结为优先级问题: if.for等的求值规则通常归结为语义. 函数式编程语言的Scheme,将这 ...

  3. Lisp和SICP

         大概不少programmer都看过<黑客与画家>,作者用了整整一章的篇幅讨论Lisp的强大.我自然就会手痒痒.      几个月前,几天内攻城略地搞定了Python,用的方法便是 ...

  4. javascript中的递归函数

    正常的递归函数如下: function factorial(num){ ){ ; }else{ ); } } 这个函数表面看起来还ok,但如果我们执行下面代码就会出错. var jenny = fac ...

  5. JS函数相关及递归函数的使用

    JS函数相关及递归函数的使用 通用js程序: function 函数名(参数列表) { 函数体 } 可使用alert()输出,也可用return返回值. alert与return区别: functio ...

  6. python3--函数(函数,全局变量和局部变量,递归函数)

    1.1函数 1.1.1什么是函数 函数就是程序实现模块化的基本单元,一般实现某一功能的集合.函数名:就相当于是程序代码集合的名称参数:就是函数运算时需要参与运算的值被称作为参数函数体:程序的某个功能, ...

  7. Python之路 day3 递归函数

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 在函数内部,可以调用其他函数.如果一个函数在内 ...

  8. Python3学习(二)-递归函数、高级特性、切片

    ##import sys ##sys.setrecursionlimit(1000) ###关键字参数(**关键字参数名) ###与可变参数不同的是,关键字参数可以在调用函数时,传入带有参数名的参数, ...

  9. 浅谈-js递归函数

    所谓的递归函数就是在函数体内调用本函数.使用递归函数一定要注意,处理不当就会进入死循环.递归函数只有在特定的情况下使用 ,比如阶乘问题 下面我们就做一个10以内的阶乘试试看吧: [Ctrl+A 全选 ...

  10. Codevs 1910递归函数

    1910 递归函数  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 对于一个递归函数w(a, b, c). 如果a <= ...

随机推荐

  1. java虚拟机总结

    jvm内存模型 u  程序计数器 u  Java栈(虚拟机栈) u  本地方法栈 u  Java堆 u  方法区及其运行时常量池 垃圾回收机制 u  新生代和老年代 u  参数设置 u  垃圾回收(M ...

  2. c# 内存的具体表现- 通用类型系统 深拷贝 浅拷贝 函数传参

    c# 通用类型系统 及变量在 深拷贝 浅拷贝 函数传参 中的深层次的表现 在编程中遇到了一些想不到的异常,跟踪发现,自己对于c#变量在内存上的表现理解有偏差,系统的学习并通过代码实验梳理了各种情况下, ...

  3. [刷题]算法竞赛入门经典(第2版) 5-8/UVa230 - Borrowers

    //又开学啦,不知不觉成为大二的老人了...时间过得好快啊,感觉好颓废... 题意:建立一个借书/归还系统.有借.还.把还的书插到书架上这三个指令. 代码:(Accepted, 0ms) //UVa2 ...

  4. jquery源码 DOM加载

    jQuery版本:2.0.3 DOM加载有关的扩展 isReady:DOM是否加载完(内部使用) readyWait:等待多少文件的计数器(内部使用) holdReady():推迟DOM触发 read ...

  5. 仿中关村win8频道(win8.zol.com.cn)下的tab效果

    最近觉得中关村win8频道下的那个Tab效果很好看. 一时兴起就自己做了一个.觉得还蛮不错的,特地来给大家分享一下.以下是相关的HTML页面写法: <div class="popula ...

  6. Item 27: 明白什么时候选择重载,什么时候选择universal引用

    本文翻译自<effective modern C++>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 Item 26已经解释了,不管是对全局函数还是成员 ...

  7. 计算facebook sdk需要的key hashes

    1. 下载openssl,在C盘创建openssl文件夹,解压下载的zip到openssl文件夹. 2. 找到debug.keystore. windows下在C:\Users\用户名\.androi ...

  8. Linux学习第一步(虚拟机的和镜像文件的安装)

    一.安装虚拟机(本文以vmware workstation 12为例) 1.在网上所有虚拟机并下载. 2.找到下载文件安装好 3.一直下一步 4.接下来的就是选择安装的目录了,当然如果你的电脑c盘够大 ...

  9. Unable open dabase as spfile parameter incorrect

    Error desc: ORA-00821: Specified value of sga_target 16M is too small, needs to be at least 4832M   ...

  10. conda 使用清华大学开源软件镜像

    conda 使用清华大学开源软件镜像 Anaconda的安装步骤不在本文的讨论中,我们主要是学习一下如何配置conda的镜像,以及一些问题的解决过程 配置镜像 在conda安装好之后,默认的镜像是官方 ...