c语言递归函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言递归函数相关的知识,希望对你有一定的参考价值。

若在main函数中调用hanoi(3,'A','B','c')运行结果
void move(char getone,char putone)
printf("%c-->%c\n",getone,putone);

void hanoi(int n,char one, char two,char three)
if(n==1)move(one,three);
else
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);


结果是:
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
这个是怎么得到的啊,递归的头都晕了,能不能帮忙把过程写出来,越清楚越好!!!!

  递归函数:
  编程语言中,函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数。递归函数不能定义为内联函数。
  在数学上,关于递归函数的定义如下:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值X0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数。
  函数介绍:
  在数理逻辑和计算机科学中,递归函数或μ-递归函数是一类从自然数到自然数的函数,它是在某种直觉意义上是"可计算的" 。事实上,在可计算性理论中证明了递归函数精确的是图灵机的可计算函数。递归函数有关于原始递归函数,并且它们的归纳定义(见下)建造在原始递归函数之上。但是,不是所有递归函数都是原始递归函数 — 最著名的这种函数是阿克曼函数。
  其他等价的函数类是λ-递归函数和马尔可夫算法可计算的函数。
  例子:

  //代码1
  void func()
  
  //...
  if(...)
  func();
  else
  //...
  
  条件:
  一个含直接或间接调用本函数语句的函数被称之为递归函数,在上面的例子中能够看出,它必须满足以下两个条件:
  1) 在每一次调用自己时,必须是(在某种意义上)更接近于解;
  2) 必须有一个终止处理或计算的准则。
  梵塔的递归函数:
  //C
  void hanoi(int n,char x,char y,char z)
  
  if(n==1)
  move(x,1,z);
  else
  
  hanoi(n-1,x,z,y);
  move(x,n,z);
  hanoi(n-1,y,x,z);
  
  
参考技术A 递归求
阶乘
的吧,不过你写的有问题,函数既然接受
形参
n,在函数里就不用再读取了;而且函数返回的是long类型,应该
强制转换
返回值
参考技术B 这样吧,你不要管什么递归,你自己想一下,不用递归,怎么解这个问题,最后得出的思路肯定就恰好是递归的过程 参考技术C 这个是要用图来说明的…一画图什么都明白了
对于递归,我打个比方吧!
就像一根缠绕着的铁链,知道从第一个环就能解开,但是现在只能拿到最后一个环,所以就必须从最后一个环顺着链条往头找,直到找到第一个,就相当于找到递归的跳出条件了
例子不是很恰当
不明白的话,留言,一定给你讲清楚…留言比回
参考技术D 这是道汉诺塔的题目

hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
意思是说

1)如果我把上面的 n-1个元素放到第二个柱子上
2)那么我就可以把最下面的棋子放到第三个柱子上
3)然后我再把第二个柱子上的n-1个棋放到第三个柱子上

第二个参数是源地址,第四个参数是目标地址,第三个参数是暂存地址。

C语言编程:用函数递归法求Fibonacci数列的前n项·

帮帮忙··写下注释··

#include <stdio.h>

long int F(int n)

if (n==1||!n)

return n;

else return F(n-1)+F(n-2);

int main(void)

int i,n;

printf("n=");

scanf("%d",&n);

for (i=0; i<n; i++)

printf("%-10ld",F(i));

return 0;

在数理逻辑和计算机科学中

递归函数或μ-递归函数是一类从自然数到自然数的函数,它是在某种直觉意义上是"可计算的" 。事实上,在可计算性理论中证明了递归函数精确的是图灵机的可计算函数。递归函数有关于原始递归函数,并且它们的归纳定义(见下)建造在原始递归函数之上。但是,不是所有递归函数都是原始递归函数 — 最著名的这种函数是阿克曼函数。

以上内容参考:百度百科-递归函数

参考技术A #include <stdio.h>
#define COL 10 //一行输出10个
long scan()
//输入求fibonacci函数的第N项
int n;
printf("Input the N = ");
scanf("%d",&n);
return n;

long fibonacci(int n)
//fibonacci函数的递归函数
if (0==n||1==n) //fibonacci函数递归的出口
return 1;

else
return fibonacci(n-1)+fibonacci(n-2);
//反复递归自身函数直到碰到出口处再返回就能计算出第n项的值


int main(void)

int i,n;
n = scan();
printf("Fibonacci数列的前%d项\n", n);
for (i=0; i<n;) //输出fibonacci函数前n项每项的值

printf("%-10ld",fibonacci(i++)); //调用递归函数并且打印出返回值
if(i%COL==0)
//若对COL取余等于0就换行,也就是控制每行输出多少个,
//而COL=10就是每行输出10个
printf("\n");


printf("\n");
return 0;
本回答被提问者采纳
参考技术B #include<stdio.h>

int fib(int n)

if(n==0 || n==1) return 1;
return fib(n-1)+fib(n-2); //递归


void main()

int i;
for(i=0;i<10;i++)

printf("%d\n",fib(i));

参考技术C #include <stdio.h>

void main()

long f1,f2;
int i;
f1=1;f2=1;

for(i=1;i<=20;i++)


printf("%ld,%ld,",f1,f2);
f1=f1+f2;
f2=f2+f1;

if(i%2==0)

printf("\n");



参考技术D 我写一下重要的代码!
int fact(int n)
if(n==0)
return 1;
else
return(n*fact(n-1));

以上是关于c语言递归函数的主要内容,如果未能解决你的问题,请参考以下文章

c语言递归函数

C语言 编写递归函数

c语言怎么用递归调用函数的方法求n的阶乘?

C语言 求把一个递归函数 改成一个普通的函数 需要用到while loop

C语言编程:用函数递归法求Fibonacci数列的前n项·

C语言的两个问题: 所有的递归程序均可以用非递归算法实现?递归函数中的形式参数是自动变量吗? c语言中