何谓递归?

递归就是子程序或函数重复的调用自己,并传入不同的变量来执行的一种程序设计技巧。

先看一个题:

设计一个可计算两数相乘,但仅用加法运算,不使用乘法运算的程序。

思路:假设欲计算出13×4,则13×4=13+(13×3)

                                                                  =13+(13+(13×2))

                                                                  =13+(13+(13+(13×1)))

                                                                  =13+(13+(13+13))

                                                                  =13+(13+26)

                                                                  =13+39

                                                                  =52 (即将13连加4次)

 

程序:

#include <stdio.h>

int mutiple(int m, int n)
{
 int result;
 if (n==1)
 {
  result = m;
 }
 else
 {
  result = m + mutiple(m,n-1);
 }
 return result;
}

void main()
{
 int numA,numB,product;
 printf("enter number A:");
 scanf("%d",&numA);
 printf("enter number B:");
 scanf("%d",&numB);
 product = mutiple(numA,numB);
 printf("%d*%d=%d",numA,numB,product);
}

从上例可归纳出几个解递归问题的步骤:

(1)了解题意是否适合用递归来解题

(2)决定递归结束条件

(3)决定递归执行部分

说明:处理递归问题时,常采用if语句来判断是否适合递归结束条件,格式为:

if (符合递归结束条件)

       返回 答案

else

       使用递归将程序分割为更简单的小程序

--------------------------------------------------

递归的应用:

1、将字符串反转。

#include <stdio.h>
#include <string.h>

char string[30];
int length;

void Reverse(int n)
{
 if (n<length)
 {
  Reverse(n+1);
  printf("%c",string[n]);
 }
}

void main()
{
 printf("enter string:");
 scanf("%s",&string);
 length = strlen(string);
 printf("the reverse string:");
 Reverse(0);
 printf("/n");
}

2、求两个数的最大公因子的程序。

#include <stdio.h>

int gcd(int m, int n)
{
 if (n==0)
 {
  return m;
 }
 else
 {
  return gcd(n,m % n);
 }
}

void main()
{
 int numberA,numberB,result;
 printf("the great common divisor of number A,number B/n");
 printf("enter number A:");
 scanf("%d",&numberA);
 printf("enter number B:");
 scanf("%d",&numberB);
 result = gcd(numberA,numberB);
 printf("gcd(%d, %d) = %d/n",numberA,numberB,result);
}

3、求费波纳伽级数。

#include <stdio.h>

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

void main()
{
 int number;
 int result;
 printf("the fibonacci numbers/n");
 printf("please enter a number:");
 scanf("%d",&number);
 result = fib(number);
 printf("fibonacci number of %d = %d/n",number,result);
}

                                                                                  ----------黄国瑜,叶乃菁《数据结构c语言版》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值