C和指针之函数之实现阶乘和斐波那契数(递归和非递归)
来源:互联网 发布:金贵软件怎么样 编辑:程序博客网 时间:2024/06/09 22:17
1、问题
实现阶乘和斐波那契数(递归和非递归)
2、代码实现
#include <stdio.h>int num = 0;//递归实现斐波那契数// n <=2, f(n) = 1, n > 2 f(n) = f(n - 1) + f();long fibonacci(int n){ //计算fibonacci(3)计算了多少次 if (n == 3) num++; if (n <= 2) { printf("num is %d\n", num); return 1; } return fibonacci(n - 1) + fibonacci(n - 2);}//非递归实现斐波那契数long fibonacci1(int n){ long result = 1, pre_result = 1, next_pre_result; while (n > 2) { n -= 1; next_pre_result = pre_result; pre_result = result; result = pre_result + next_pre_result; } return result;}//递归实现n的阶乘//n <= 1, f(n) = 1, n > 1 f(n) = n * f(n - 1);long factorial(int n){ if (n == 1) return 1; return n * factorial(n - 1);}long factorial1(int n){ int result = 1; while (n > 1) { result *= n; n -= 1; } return result;}int main(){ long result = fibonacci(10); printf("fibonacci result is %ld\n", result); long result1 = factorial1(3); printf("factorial result is %ld\n", result1); return 0;}
3、运行结果
num is 21fibonacci result is 55factorial result is 6
4、总结
递归函数会把参数压倒堆栈中,为局部变量分配内存空间,有时开销非常大,经过上面的测试,递归实现斐波拉契数f(10)的时候,f(3)求了21次,求f(30)的时候,f(3)运行了317811次,每次计算结果都一样,只要算一个就行了,所以额外的开销非常大,用非递归实现效率好多了,
阅读全文
0 0
- C和指针之函数之实现阶乘和斐波那契数(递归和非递归)
- C语言使用非递归和递归函数分别实现阶乘,斐波那契,最大公约数
- 斐波那契数--递归和非递归实现
- 斐波那契数--递归和非递归实现
- 斐波那契数--递归和非递归实现
- Java学习之旅--斐波那契数列的递归和非递归实现
- 递归和非递归实现斐波那契数列
- 递归和非递归方法实现斐波那契
- 用递归和非递归实现斐波那契数
- 递归-阶乘函数和斐波那契数列
- 递归和非递归分别实现求第n个斐波那契数(C语言)
- C语言实现-递归和非递归求第n个斐波那契数
- c语言实现求第n个斐波那契数。(递归和非递归)
- C语言实现斐波那契数列递归和非递归算法
- 递归和非递归实现阶乘
- 阶乘的递归和非递归实现
- 递归和非递归方法求斐波那契数
- 斐波那契数列递归和非递归
- C与C++的区别(上)
- ROCKETMQ 主从切换机制
- 逻辑查询处理阶段简介
- ACM-ICPC 2017 Asia QingDao:喜,抑或是悲?幸运,抑或是倒霉?退役!!!
- spring in action笔记(三)——配置bean
- C和指针之函数之实现阶乘和斐波那契数(递归和非递归)
- 初识Spring_03
- C# Field笔记
- VMware 虚拟机安装 Ubuntu 简单教程
- 用户的访问权限过滤器,防止用户直接输入URL直接访问资源。
- Mosquitto搭建Android推送服务(一)MQTT简介
- Ubuntu16.04中Vim对python2补全的配置
- 升级win10
- 创建线程池的时候设置名字