Bootstrap

递归函数 转 非递归函数

递归函数 转 非递归函数

  • 折半查找
    • 思路:
    • 递归实现
    • 非递归实现
  • 斐波那契数列/兔子问题
    • 功利性解题技巧:
    • 递归实现
    • 非递归实现


折半查找

思路:

  • 要查找的key值等于位于数组中央mid处的值,直接返回mid
  • key值比中间的值大,向右继续寻找
  • key值比中间的值小,向左继续寻找

递归实现

int Binary_Search1(int data[],int key,int low,int high){
	int mid = (low+high)/2;
	if(low>high){
		return -1;
	}
	if(key == data[mid]){
		return mid;
	}else if(key > data[mid]){//key值比中间的值大,向右继续寻找 
		return Binary_Search1(data,key,mid+1,high);
	}else{
		return Binary_Search1(data,key,low,mid-1);
	} 
}

非递归实现

int  Binary_Search2(int data[],int key,int low,int high){
	int mid;
	while(low<=high){
		mid = (low+high)/2;
		if(data[mid] == key){
			return mid;
		}else if(data[mid] > key){
			high = mid-1;
		}else{
			low = mid+1;
		}
	}
}

斐波那契数列/兔子问题

斐波那契数列(Fibonacci Sequence)是数学中一个经典的数列,其特点是每一项都是前两项之和。最初,这个数列是在研究兔子繁殖问题时被提出的,但后来被发现有广泛的数学和自然界应用。
数列的定义为:
第0项:( F(0) = 1 )
第1项:( F(1) = 1 )
从第2项开始: ( F ( n ) = F ( n − 1 ) + F ( n − 2 ) ) ( ( n ≥ 2 ) )

功利性解题技巧:

  • 根据函数,在草稿纸上写出对应自变量x与因变量y的表格,观察表格中相邻数据之间的关系
    在这里插入图片描述

递归实现

 int Fibo1(int n){
 	if(n <= 1){
 		return 1;
	 }
	 return Fibo1(n-1)+Fibo1(n-2);
 }  

非递归实现

int Fibo2(int n){
	if(n <= 1){
		return 1;
	}
	int f0 = 1,f1 = 1;
	int c;
	for(int i = 2;i <= n;i++){
		c = f0 + f1;
		f0 = f1;
		f1 = c;
	}
	return c;
} 
;