函数及函数的递归调用求解汉诺塔和数的阶乘

函数的性质
一个C程序可由一个主函数和若干个其他函数构成,主函数可调用其他函数,其他函数也可以相互调用,同一个函数可以被一个函数或多个函数调用任意多次。
优点:
(1)提高代码的复用性;
(2)对功能和任务的拆解。(函数可以把代码拆解为多个模块,但模块越多效率相对越低。)
函数定义的形式
类型标识符 函数名(形参表列)
{
声明部分
语句部分
}

在定义函数时,函数名后面括号中的变量名称为“形式参数”,在主调函数调用函数时,函数名后面括号中的变量名称为“实际参数”。
函数名要符合标识符命名规则且不与系统库函数重名。
形参表列:需有每个形参的类型和名称,以 , 分隔。
(1)在定义函数中制定的形参,若未出现函数调用时,他们并不占内存中的存储单元,只有在函数调用时,系统才为其分配内存单元,调用结束后,形参中所占的内存单元被释放。
(2)实参可以是常量,变量,表达式。
函数调用
函数需先声明,后使用(或将被调函数写于主调函数之前),在主调函数前引入被调函数声明,声明时形参可省略。
被调函数必须是已存在函数,对于库函数,调用前需包含相应头文件。
在调用一个函数的过程中又出现直接或间接的调用该函数本身,称为函数的递归调用。

  *用函数的递归调用求解汉诺塔问题*

void H(int m, char a, char b, char c)
{
if (m == 1)
{
printf("%c–>%c", a, c);
puts(" “);
}
else
{
H(m - 1, a, c, b);
printf(”%c–>%c", a, c);
puts(" “);
H(m - 1, b, a, c);
}
}
int main()
{
int m;
printf(“请输入所要移动的层数:\n”);
scanf(”%d", &m);
printf(“所要移动的步骤如下:\n”);
H(m, ‘A’, ‘B’, ‘C’);
return 0;
}

用函数的递归调用求一个数的阶乘
int f(int m)
{
int k;
if (m < 0)
{
printf("%d<0,输入有误!", m);
}
else if (m == 0 || m == 1)
{
k = 1;
}
else
{
k = f(m - 1)*m;
}
return k;
}
int main()
{
int m;
int y = 0;
printf(“请输入所求的数:\n”);
scanf("%d", &m);
y = f(m);
printf("%d!= %d\n", m, y);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值