C语言递归与循环的比较

3 篇文章 0 订阅

一、编写递归函数求两个正整数a和b的最大公约数(GCD, Greatest Common Divisor) ,使用Euclid算法:

1. 如果a除以b能整除,则最大公约数是b。
2. 否则,最大公约数等于b和a%b的最大公约数。
递归函数实现如下:

#include<stdio.h>

int GCD(int a,int b)
{
   int result;
   if(a%b==0)
   {
	  result = b;
   	  return result;
   }
   else 
	  {
		
		 result = GCD(b,a%b);
		 return result;
	  }
}

int main(void)
{
 
   printf("gcd is :%d\n",GCD(10,5));

   return 0;
}

循环方法实现如下:

#include<stdio.h>

int gcd_loop(int a,int b)
{
  int result; 
  int temp;
   if (a%b==0)
   {
	  result = b;
  	  return result;
   }
   else 
	   while((a%b)!=0)
   {
	  a = b;
	  temp = a%b;
	  b = temp;
   }
}

int main(void)
{
   
   
   printf("gcd:%d\n",gcd_loop(10,5));

   return 0;
}

二、编写递归函数求Fibonacci数列的第n项,这个数列是这样定义的:
fib(0)=1
fib(1)=1
fib(n)=fib(n-1)+fib(n-2)

1、用递归函数实现:

#include<stdio.h>

int Fibonacci(int n)
{
   int result;
   if (n==0 || n==1)
   {
	  result = 1;
	  return result;
   }
   else  if(n>0)
   {
	  result = Fibonacci(n-1) + Fibonacci(n-2);
   	  return result;
   
  }
}

 int main(void)
 {
	int n;
	for(n=1; n<=15 ; n++)
	printf("%ld\n",Fibonacci(n));

	return 0;
 }

2、用循环方法实现:

#include<stdio.h>

int Fibonacci_loop(int n)
{
   int temp = 0;
   int a=1;
   int b=1;
   int i=0;
   
//   for(i=0;i<n;i++)
	while(i<n)
   {
	 if(i==0)
	 {
	 temp = 1;
	 i=i+1;
	 }
	 else  
	{
	 temp=a+b;
	 a = b;
	 b = temp;
	 i=i+1;
	}
//	return temp;	//返回值的位置应该在函数中,表示函数结束并返回相应的值,而不能放到分支语句中,不然函数一直无法完成
   }
// i=i+1;
   return temp;
}

int main(void)
{
   
   printf("%d\n",Fibonacci_loop(15));

   return 0;
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值