递归定义必须是有明确含义,是指必须一步比一步简单,最终是有终结的,绝不能无限循环下去
所有的递归函数都能找到对应的非递归定义
递归的性能相对于非递归来说,并没有性能上的优势,实际上,有时候使用循环的性能更好。如果使用循环,程序的性能可能更高,如果使用递归,程序可能更容易理解。如何选择要看什么对你更重要
第一种,用于计算gcd(m,n)的欧几里得算法(递归)
举个例子来简单的解释一下欧几里得算法的思路
欧几里得算法采用的方法是重复gcd(m,n)=gcd(n,m mod n),直到m mod n等于0。详细一点说,就是:
第一步:如果n=0,返回m的值作为结果,同时过程结束,否则,进入第二步
第二步:m mod n的余数赋值给r
第三步:将n的值赋给m,将r的值赋给n,返回第一步
比如说:
gcd(60,24)=gcd(24,60 mod 24)=gcd(24,12)=gcd(12,24 mod 12)=gcd(12,0)=12
#include<stdio.h>
#include<iostream>
using namespace std;
int gcd(int m,int n){ //辗转相除法+递归调用
if(n==0)//如果n=0,返回m的值作为结果
return m;
else
return gcd(n,m%n);//递归调用
}
int main(){
int m,n;