一 函数嵌套调用
函数能嵌套调用,不能嵌套定义。
二 链式访问
这两段代码产生同样的效果,第二段代码中strlen函数作为printf打印函数的第二个参数,将自己的返回值3返回给peintf函数
由MSDN了解到,printf函数的返回值是打印字符个数,所以该代码打印了4321
三 函数递归(函数自己调用自己)
利用递归打印整型值的每一位(按顺序):
#include<stdio.h>
void Print(unsigned int n)
{
if(n>9)
Print(n/10);
printf("%d ",n%10);
}
int main()
{
unsigned int num=0;
scanf("%u",&num);
Print(num);
return 0;
}
注意:1.递归必须有限制条件,满足条件时递归不在继续。
2.每次递归之后越来越接近限制条件。
编写函数用递归求字符串长度:
#include<stdio.h>
int Strlen(char* s)
{
if('\0'==*s)
return 0;
else
return 1+Strlen(s+1);
}
int main()
{
char arr[100]={'\0'};
int n=0;
gets(arr);
n=Strlen(arr);
printf("%d",n);
return 0;
}
求n的阶乘:
//原理:n!=n*(n-1)!
#include<stdio.h>
int fac(int x)
{
if(x<=1)
return 1;
else
return x*fac(x-1);
}
int main()
{
int n=0;
int ret=0;
scanf("%d",&n);
ret=fac(n);
printf("%d",ret);
return 0;
}
求第n个斐波那契数:
//原理:n<=2时n=1,n>2时n=(n-1)+(n-2)
#include<stdio.h>
int fib(int x)
{
if(x<=2)
return 1;
else
return fib(x-1)+fib(x-2);
}
int main()
{
int n=0;
int ret=0;
scanf("%d",&n);
ret=fib(n);
printf("%d",ret);
return 0;
}