C++函数之递归调用
来源:互联网 发布:dnf深度优化启动加速 编辑:程序博客网 时间:2024/05/17 09:35
在书上看到过归纳的使用递归调用解决问题的特点:
1,将原有的问题能够分解为一个新问题,而新问题又要用原有问题的解决方案,这便体现了递归。按照这一特点将问题分解下去,每次出现的新问题都是原问题简化的子问题,而种种分解出来的新问题是具有已知解的问题。
2,递归调用的过程可分为两个阶段:递推和回归。
3,递归调用通过递归函数来实现。
4.一般来说,可使用递归调用编写的程序都可用非递归调用来编写。
一,关于阶乘的递归调用(fact()函数是求n!的递归函数)
#include <iostream.h>long int fact(int n);//(fact()函数递归调用之前的说明)void main(){ int n; cout<<"Input a positive integer; "; cin>>n; long fa=fact(n);//(递归调用) cout<<n<<"!="<<fa<<endl;}long int fact(int n)//(fact()函数的定义){ long int p; if(n==0) p=1; else p=n*fact(n-1); return p;}
例如将n值定为10得出程序运行的结果为:
二,关于最大公约数的递归调用(gcd1()是求两个整数的最大公约数)
#include <iostream.h>long int gcd1(int x,int y);void main(){ int a,b; cout<<"Input two number; "; cin>>a>>b; long g=gcd1(a,b); cout<<g<<endl;}long gcd1(int x,int y){ if(x%y==0) return y; return gcd1(y,x%y); }
将a和b值定为15和10的结果为:
对于此递归函数也可以采用非递归的编程方法:
#include <iostream.h>long int gcd1(int x,int y);void main(){ int a,b; cout<<"Input two number; "; cin>>a>>b; long g=gcd1(a,b); cout<<g<<endl;}long gcd1(int x,int y){ int temp; while(y!=0) { temp=x%y; x=y; y=temp; } return x;}
同样的输入后结果为:
使用有限次的递归调用方法编写程序的额好处就是一般比其他的方法简短,可读性好。
1 0
- C语言之函数调用12—递归法求阿克曼函数
- C语言之函数调用16—递归法之一般函数的调用(1)
- C语言之函数调用17—递归法之一般函数的调用(2)
- C函数的调用-----递归调用
- C++函数之递归调用
- c语言之递归调用
- C语言之递归函数
- C语言 之递归函数
- C语言之递归函数
- C语言之函数调用11—递归法求Hermite函数
- C语言实现:函数的递归调用
- C++:函数的递归调用相关
- C语言函数的递归和调用
- C语言函数的递归调用
- C语言函数的递归调用
- C语言简单函数递归调用问题
- 直白C语言函数递归调用
- C语言下的函数递归调用
- 高斯日记
- 基于UML的软件设计全过程
- android布局优化 笔记
- NLP 迷思之四:词义消歧(WSD)是NLP应用的瓶颈
- 第一次接触Weblogic遇到的问题
- C++函数之递归调用
- 无模式数据库NoSQL讲解
- iframe中的各种跳转方法
- 欢迎使用CSDN-markdown编辑器
- busybox编译问题
- qtp遇到的问题及解决
- canvas 组合 类型 简单 描述
- google hack
- Ubuntu12.04 root用户登录设置