函数

来源:互联网 发布:科学无法解释知乎 编辑:程序博客网 时间:2024/06/05 18:50

一、函数递归用法:顺序、倒序

放在重复调用之前的语句在调用之前就完成------逆序执行
放在调用后面 的语句在调用结束后才能执行----- 倒序执行
//在倒序的情况下,不允许用n -- ,因为后面还有用到n的操作
当涉及有返回值的关系时(如)-----只能用倒序!!!

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int mul(int n);
void put_s_reverse(char *str);
void put_s_order(char *str);

int main()
{
char s[20] = {0};//清零,也可用memset(s,0,20) 来代替
printf("printf a string:\n");
scanf("%19s",s);//最后一位要留着放'\0'
printf("put string in reverse:\n");
put_s_reverse(s);
printf("\n");
printf("put string in order:\n");
put_s_order(s);
printf("\n");

int n;
printf("input a digit:\n");
scanf("%d",&n);
printf("1*2...*%d = %d\n",n,mul(n));

return 0;
}

//将一个字符串进行顺序输出
void put_s_order(char *str)
{
if(strlen(str)==1)
printf("%c",*str);
else
{
printf("%c",*str); //放在重复调用之前的语句在调用之前就完成------逆序执行
put_s_order(str+1);
}
}
//将一个字符串进行倒序输出
void put_s_reverse(char *str)
{
if(strlen(str)==1)
printf("%c",*str);
else
{
put_s_reverse(str+1);//只允许使用str+1,不许用str++,因为后面还有关于str的操作printf("%c",*str);,不允许改变后面str的
printf("%c",*str);//放在调用后面 的语句在调用结束后才能执行----- 倒序执行
}
}

//实现将一个数进行累乘1*2*3*4*5*...*n:--------当涉及有返回值的关系时-----只能用倒序!!!
int mul(int n)
{
int mul_n = 1;
if(n == 1)
return 1;
else
{
mul_n = n * mul(n-1);//在倒序的情况下,不允许用n -- ,因为后面还有用到n的操作
return mul_n;//当涉及这样有返回值的关系时-----只能用倒序!!!


}
}

输出结果:

printf a string:
123456
put string in reverse:
654321
put string in order:
123456

input a digit:
5
1*2...*5 = 120


0 0
原创粉丝点击