递推函数的迭代形式与递归形式

有一函数 f() 遵守以下规则: 当 n < 3 时, f(n) = n 当 n >= 3 时, f(n) = f(n - 1) + 2f(n - 2) + 3f(n - 3)

用迭代和递归的形式分别写出 计算 f(n) 的过程。

递归形式:

(define (f n)
  (if (< n 3)
     n
     (+ (f (- n 1))
         (* 2 (f (- n 2)))
         (* 3 (f (- n 3))))))

迭代形式:

(define (f n)
  (if (< n 3)
     n
     (f-it 2 1 0 n)))

(define (f-it first second third count)
  (if (< count 3)
     (+ first second third)
     (f-it first (* 2 second) (* 3 third) (- count 1))))
时间: 2024-11-10 13:02:41

递推函数的迭代形式与递归形式的相关文章

十七、斐波那契数列 【递推思想(迭代思想)解决】

 递推思想本身并不跟函数有直接关系(虽然常常写在函数中). 其基本思路为: 为了解决一个"大"问题,根据现实逻辑,如果能够找到同类问题的一个"最小问题"的答案(通常是已知的),并且根据已知算法,又可以因此得到比最小问题"大一级"问题的答案. 而且,依次类推,又可以得到再大一级问题的答案,最终就可以得到"最大那个问题"(即要解决的问题)的答案. 可见,该思想的过程依赖与2个条件: 1,可知同类最小问题的答案: 2,大一级问题

a(n+1) = f[a(n)] 型递推数列的迭代作图(玩计算器玩出了问题)

把任意一个正数开平方再加 \(1\), 把得到的结果也开平方再加 \(1\), 不断算下去,最终总会得到 \( \frac{3+\sqrt{5}}{2} \approx 2.61804 \), 即: \( \sqrt{\cdots \sqrt{\sqrt{\sqrt{x}+1}+1}+1}+1 = \frac{3+\sqrt{5}}{2} \;\;\;\; (x>0) \) 这是某同学玩计算器时发现的,非常有意思.不管一开始给的数是多少,终最都会停在这个神奇的数上,它是黄金比 \( \frac{

洛谷 P1464 Function【动态规划(递推)/记忆化搜索(递归)】

题目描述 对于一个递归函数w(a,b,c) 如果a<=0 or b<=0 or c<=0就返回值1. 如果a>20 or b>20 or c>20就返回w(20,20,20) 如果a<b并且b<c 就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c) 其它别的情况就返回w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1) 这是个简单的递归函数,但实现起来可能会有些问题.当a,b,c均为1

从一道NOI练习题说递推和递归

一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可以一步上2阶,也可以一步上3阶,编程计算共有多少种不同的走法. 这个问题可以用递归来进行解决,但是解题时间1秒明显不够用.怎么办呢,可以考虑找到“规律”,然后推导公式解决问题,开始画图分析: 这是4个台阶时的全部7种走法,记作f(4)=7.现在观察右侧绿色走过的部分,1234四种情况是3个台阶时的4种走,法记

Bailian1664 Placing apples【递推+记忆化递归】

1664:Placing apples 总时间限制: 1000ms 内存限制: 65536kB 描述 We are going to place M same apples into N same plates. There could be some empty plates. How many methods do we have? When we have 7 applesand 3 plates, the methods, (1, 5, 1) and (5, 1, 1) are the

递推方程的求解

递推方程的求解 其实这是本人<算法设计与分析>课程回顾的内容整理,用来测试一下cnblogs上的markdown和数学公式支持...... 什么是递推方程? 对于序列\(a_0,a_1,a_2, -,a_n\),简记为\({a_n }\),一个把\(a_n\)与若干个\(a_i (i<n)\)联系在一起的等式叫做关于序列\({a_n}\)的递推方程. 为什么要学习求解递推方程? 因为对递归算法的分析离不开递推方程的求解 例如,Hanoi塔问题递归算法为: Hanoi(A, C, n):

算法之——————递推的简单解释

1.顺推法:已知条件,逐步到结果,也叫迭代法,转转相除 2.逆推法:已知结果,推条件 步骤 1:确定迭代变量 2:建立迭代关系式 3:迭代过程的控制:1是计数型循环控制2,条件循环解决迭代次数无法确定的问题 关键:有迭代过程,循环结构 递推过程找迭代关系式,循环控制好迭代过程 顺推: 谷角猜想:编程打印出过程: 1 #include<stdio.h> 2 //#include<malloc> 3 #include<string.h> 4 int main() 5 { 6

hdu--1978--记忆化深度搜索||递推

这题 我开始的做法是 记忆化搜索  但是tm地竟然tle了...很想不通 因为数据很小啊 就100 虽然方案的总数可能会很大.. 然后 我就去百度 记忆化搜索 看下是不是我用错方法了 事实证明 我虽然没有用错 但还是 学到了很多=-=. 其实  我很早以前 也看过关于 记忆化搜索的一些介绍 但是 并没有太多感觉 并不是那些作者写的不好 而是我的水平没到 感受不了.. 很多东西会在不知不觉中提升~ 我想 将我读的这篇介绍 传到这篇博客里来 似乎只能上传照片和视频=-=   那我给个链接吧  传送

再谈循环&amp;迭代&amp;回溯&amp;递归&amp;递推这些基本概念

循环:不断重复进行某一运算.操作. 迭代:不断对前一旧值运算得到新值直到达到精度.一般用于得到近似目标值,反复循环同一运算式(函数),并且总是把前一 次运算结果反代会运算式进行下一次运算 递推:从初值出发反复进行某一运算得到所需结果.-----从已知到未知,从小到达(比如每年长高9cm,20年180,30后270) 回溯:递归时经历的一个过程. 递归:从所需结果出发不断回溯前一运算直到回到初值再递推得到所需结果----从未知到已知,从大到小,再从小到大(你想进bat,那么编程就的牛逼,就得卸载玩