递归函数例题(C语言中的一道例题的问题)

本文目录
- C语言中的一道例题的问题
- 求公式的递归函数
- C语言函数那一章的习题,求解2-4题,能给出详细思考过程吗谢谢! 2.答案36 3.答案101
- 这道函数递归调用的执行顺序是什么(有例题,请根据0-1-2-__来告诉我)
C语言中的一道例题的问题
long fun(int n)
//这是一个递归函数,fun(10)要返回10*fun(9),但是fun(9)还不知道,等调用fun(9)返回后才返回
//而fun(9)要返回9*fun(8),但是fun(8)也不知道, 一直到fun(1)的时候返回1
//fun(1)返回后,fun(2)函数返回值=2*fun(1)=2……
{
if (n》1)
return (n*fun(n-1));//n》1时返回n*fun(n-1)
return 1;//n=1时返回1
}
程序求10的阶乘
程序流程:
fun(10)
--》fun(9)
--》fun(8)
--》fun(7)
--》fun(6)
--》fun(5)
--》fun(4)
--》fun(3)
--》fun(2)
--》fun(1)
--》return 1
--》fun(2)return 2*fun(1)=2
--》fun(3)return 3*fun(2)=6
--》fun(4)return 4*fun(3)=24
--》fun(5)return 5*fun(4)=120
--》fun(6)return 6*fun(5)=720
--》fun(7)return 7*fun(6)=5040
--》fun(8)return 8*fun(7)=40320
--》fun(9)return 9*fun(8)=362880
--》fun(10)return 10*fun(9)=3628800
--》printf
求公式的递归函数
//应该可以一个搞定
/*
f(x,n)=x-x^2+x^3-x^4+···+(-1)^(n-1)*x^n
f(x,n-1)=x-x^2+x^3-x^4+···+(-1)^(n-2)*x^(n-1)
(-x)*f(x,n-1)=-x^2+x^3-x^4+……(-1)^(n-1)*x^n=f(x,n)-x
f(x,n)=x-x*f(x,n-1)
f(x,1)=x
*/
#include "stdafx.h"
#include 《stdio.h》
#include 《stdlib.h》
#include 《windows.h》
long int fun(int,int);
int main(int argc, char* argv)
{
int a,b;
while(1)
{
system("cls");
printf("请输入x,n的值\n");
scanf("%d %d",&a,&b);
if(a《=0||b《=0)
{
exit(0);
}
else
{
printf("%d\n",fun(a,b));
Sleep(1500);
}
}
return 0;
}
long int fun(int x,int n)
{
static long int r=x;
if(n==1)
{
r=x;
}
else
{
r=x-(x*fun(x,n-1));
}
return r;
}
C语言函数那一章的习题,求解2-4题,能给出详细思考过程吗谢谢! 2.答案36 3.答案101
2. 考define宏。define宏只是文本替换。替换过后,公式变成
(2*3)+(15)*2 = 36
3. flag = 2004%4==0&&2004%100!=0||x%400==0;
flag = YES&&YES||后面短路; flag = 1;
循环为
for(k = 1; k 《 4; k++)
{
z+=tab;
}
值为31+29+31+z本身为10 = 101
4. 递归函数。带入15,15不小于3,所以进入第二层递归,带入15/3,也就是5,5也不小于3,带入第三层递归,5/3,也就是1,1小于3,输出1,然后返回第二层递归,输出5%3,5除3商1余2,输出2,返回第一层递归,输出15%3,15除3商5余0,输出0。
所以输出120
这道函数递归调用的执行顺序是什么(有例题,请根据0-1-2-__来告诉我)
更改程序如下:
#include"stdio.h"
long fun(int n) { // 1
printf ("1-");
if (n》1) { //2
printf("2-3-");
return (n*fun(n-1)); //3
}
else if(n==1) {//4
printf("2-4-5-");
return 1; //5
}
}
main() {
int k=10;
printf("0-");
printf("\n%d!=%ld\n",k,fun(k)); // 0
getch ();
}
得到结果:
0-1-2-3-1-2-3-1-2-3-1-2-3-1-2-3-1-2-3-1-2-3-1-2-3-1-2-3-1-2-4-5-
10!=3628800
是你要的结果么?

更多文章:
avantage怎么设置为中文(Avantage安装丢失GIT)
2026年10月15日 03:00
activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)
2026年10月14日 20:30
excel连接sql数据库教程(excel怎么连接sql数据库)
2026年10月14日 19:40






