斐波那契数(C/C++,Scheme)
来源:互联网 发布:唯一旅拍怎么样知乎 编辑:程序博客网 时间:2024/05/22 12:53
一、背景
斐波那契数的定义:
二、代码
C++语言版
int fib_iter(int a, int b, int count){ if (count == 0) return b; else return fib_iter(a + b, a, count - 1);}int fib(int n){ return fib_iter(1, 0, n);}
Common Lisp语言版
(defun fib (n) (fib-iter 1 0 n))(defun fib-iter (a b count) (if (= count 0) b (fib-iter (+ a b) a (- count 1))))
更正
以上的代码部分是后面添加的(2015/12/02),以下部分当时写串了,其实是关于阶层的。不过不影响大家学习,思路是一样的。我主要也是在展示递归和迭代的区别,以上的斐波那契的两个代码就是迭代的。
二、分析
我引用两张表,大家一看便懂。
1.递归
(factorial 6)(* 6 (factorial 5))(* 6 (* 5 (factorial 4)))(* 6 (* 5 (* 4 (factorial 3))))(* 6 (* 5 (* 4 (* 3 (factorial 2)))))(* 6 (* 5 (* 4 (* 3 (2 (factorial 1))))))(* 6 (* 5 (* 4 (* 3 (* 2 1)))))(* 6 (* 5 (* 4 (* 3 2))))(* 6 (* 5 (* 4 6)))(* 6 (* 5 24))(* 6 120)720
2.迭代
(factorial 6)(factorial 1 1 6)(factorial 1 2 6)(factorial 2 3 6)(factorial 6 4 6)(factorial 24 5 6)(factorial 120 6 6)(factorial 720 7 6)720
递归的核心在于:不断地回到起点。
迭代的核心在于:不断地更新参数。
在下面的代码中,递归的核心是sum的运算,sum不断的累乘,虽然运算的数值不同,但形式和意义一样。
而迭代的核心是product和counter的不断更新。如上表中,product就是factorial的前2个参数不断的累乘更新成第一个参数;而第二个参数则是counter,其不断的加1来更新自己。
product <- counter * product
counter < - counter + 1
三、代码
C语言版
#include <stdio.h>#include <stdlib.h>int factorialRecursive(int n);int factorialIteration(int product, int counter, int max_count);int main(){ int n; printf("Enter an integer: \n"); scanf("%d",&n); printf("%d\n",factorialRecursive(n)); printf("%d\n",factorialIteration(1,1,n)); return 0;}int factorialRecursive(int n){ int sum=1; if(n==1) sum*=1; else sum=n*factorialRecursive(n-1); return sum;}int factorialIteration(int product, int counter, int max_count){ int sum=1; if(counter>max_count) sum*=product; else factorialIteration((counter*product),(counter+1),max_count);}
C++语言版
#include <iostream>using namespace std;int factorialRecursive(int n);int factorialIteration(int product, int counter, int max_count);int main(){ int n; cout<<"Enter an integer:"<<endl; cin>>n; cout<<factorialRecursive(n)<<endl; cout<<factorialIteration(1,1,n)<<endl; return 0;}int factorialRecursive(int n){ int sum=1; if(n==1) sum*=1; else sum=n*factorialRecursive(n-1); return sum;}int factorialIteration(int product, int counter, int max_count){ int sum=1; if(counter>max_count) sum*=product; else factorialIteration((counter*product),(counter+1),max_count);}
四、进阶
Scheme语言版
(define (factorial n) (if (= n 1) 1 (* n (factorial (- n 1)))))
(define (factorial n) (fact-iter 1 1 n))(define (fact-iter product counter max-count) (if (> counter max-count) product (fact-iter (* counter product) (+ counter 1) max-counter)))
为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp
8 0
- 斐波那契数(C/C++,Scheme)
- 【C语言】斐波那契数
- C 语言:斐波那锲数
- 【c语言】用迭代计算斐波那契数
- 【C语言】关于斐波那契数的求法
- C语言温习-斐波那契数
- 斐波那契数c语言程序
- 快速求斐波那契数(scheme实现)
- 【蓝桥杯】斐波那契数列项取余问题(C语言)
- C语言 前n项斐波那数列,小于一个数的斐波那数列项
- (C语言)循环与递归求斐波那契数
- 求斐波那契数(fibonacci)--c语言版
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)-网络同步赛C(大数斐波那契数)
- 霍纳规则(C/C++,Scheme)
- 斐波那契数列(java/c++)
- 【C++】斐波那契数列
- 斐波那契数列C实现
- C语言 斐波那契数列
- JavaMail出现535 5.7.3 Authentication unsuccessful错误的解决方法
- Notification的总结
- Ubuntu 14.04下成功安装ffmpeg与编译配置opencv-2.4.10
- 2015/4/28总结--git编辑文件---sts创建动态工程
- 使用 Rails Active Resource 简化 web 应用程序之间的互操作性
- 斐波那契数(C/C++,Scheme)
- 在eclipse运行maven命令时报在jre里找不到jar包
- UVA 225 Golygons(DFS + sort)
- JAVA基础详细笔记Java入门到精通JAVA学习笔记
- local variable 'xxx' referenced before assignment
- Unity3D协程学习
- MySQl学习记录3 :查询笔记
- 深入理解 CSS3 弹性盒布局模型
- Java读书笔记06 继承