大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
举一个用递归调用函数求输入非负整数的阶乘的例子,如下:
我们提供的服务有:网站设计制作、成都做网站、微信公众号开发、网站优化、网站认证、保德ssl等。为上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的保德网站制作公司
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int fact(int n){
if(n==1 || n==0) return 1;
else return n*fact(n-1);
}
int main(void){
int x;
while(1){
printf("Input x(int 12=x=0)...\nx=");
if(scanf("%d",x),x=0 x=12)//x12时会使结果溢出
break;
printf("Error,redo: ");
}
printf("%d! = %d\n",x,fact(x));
return 0;
}
这是汉诺塔吧。
原理:(总共n个盘子)
1、将第一个位置(起始位置)上的n-1个盘子移到第二个位置上,此时第一个位置只剩第n个盘子
2、将第一个位置上的最后一个盘子(第n个盘子)移到第三个位置(目标位置)上,再将第二个位置上的n-1个盘子移到第三个位置上。
你不需要晓得n-1个盘子如何从一个位置移到另一个位置,让程序做。n--n-1--n-2......1,问题不断的小化,当n=1时,直接从第一个位置移到第三个位置,再倒过来推1--2--3......--n。最终问题就会被解决。
hanoi()函数就是将问题小化,使n--1
move()函数中char x是起始位置,char y是目标位置,即x--y.用A、B、C来显示盘子是如何移动的
我给你举个简单的例子你就明白了,你可以假设n=3
然后代入这个函数,a(3)=a(2)+5;而a(2)=a(1)+5;a(1)=1
所以最后就是a(3)=1+5+5=11…
同理你可以算出a(10)=1+5*9=46
满意请采纳
liuxing167756 所说是正解:(本质就是计算斐波那契数列)
fun 这个无返回值函数需要依靠 f1 ,f2 两局部变量用来传递每一次调用的结果地址(局部变量在堆栈中),每次调用都会不一样。最后的返回值是靠*S来传送的。这种用法在返回值很多时常用。多值可以用数组指针,可以用结构指针。之所以这样用 因为 fun(n) = fun(n-1) + fun(n-2) 对推公式中需要两个不同的返回值!更简单的公式如:fun(x)=fun(x-1)+5 可以直接用带返回值得函数递归形式。任何递推公式都可以用递归实现,递归转递推就不一定了。递归的优点是形式简单执行效率低,内存资源消耗大。
根据题意是:
fun(0) = 1;
fun(1) = 1;
fun(n) = fun(n-1) + fun(n-2).
就是斐波那契数列
n 0 1 2 3 4 5 6
x 1 1 2 3 5 8 13