函数的嵌套与递归

函数的嵌套

定义函数时不能定义另外一个函数,但是可以嵌套调用函数例如,多数寻找最大值的程序就是应用了函数的嵌套。

函数的递归(函数的递归是特殊的嵌套)

递归函数一般形式:

反值类型  递归函数名(参数说明表)

{

if(递归终止条件)

返回值=递归终止值;

else

返回值=递归调用(……)的表达式;

return 返回值;

}

汉诺塔问题:(经典递归调用问题)

#include<stdio.h>

#include<stdlib.h>

void move(char x, char y)//输出移盘方案

{

printf("%c->%c\n", x, y);

}

void hanoi(int n, char one, char two, char three);

{

if (n == 1) move(one, three); //如果是1个盘,直接从第一个座移到第3个座上

else

{

hanoi(n - 1, one, three, two);

move(one, three);

hanoi(n - 1, two, one, three);

}

}

int main()

{

int n;

printf("输入盘的个数\n");

scanf("%d", &n);

printf("移盘的步骤:\n");

hanoi(n, 'A', 'B', 'C'); system("pause");

return 0;

递归的细节补充:

1.每次递归都有自己的变量,可能名称相同,但每次递归结束的值都不同。//系统调用时,都会自动保存当前函数的参数变量,递归时再开辟一片新的对应空间

2.每次调用都要有返回值,递归结束后,控制权回到上一级函数。//递归结束后会释放开辟的这片空间,同时记录递归得到的值。

3.每次递归必须逐级返回,不能跳跃或者间断。

4.函数中递归语句之前的代码,按照被调函数的顺序执行,递归之后的代码按照被调函数相反的顺序执行。

递归思想解决斐波拉及数列:

int Fib(int n)

{

if(n<=2)

return 1;

int a=1;

int b=1;

int c=1;

while(n>=3)

{

c = a + b;

b = a;

c = b;

n--;

}

return c;

}

int main()

{

int n=0;

scanf("%d\n",&n);

printf("%d\n,",Fib(n));

return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值