关于递归
对于程序执行的次顺 顺序等有些不解 迷惑 忘高手不惜赐教
比如下面程序
#include <stdio.h>
void fun(int n,int *s)
{ int f1,f2;
if(n==1||n==2) *s=1;
else
{fun(n-1,&f1); fun(n-2,&f2);*s=f1+f2;}
}
int main()
{ int x;
fun(6,&x);printf("%d\n",x);
return 0;
}
此段程序运行到{fun(n-1,&f1); fun(n-2,&f2);*s=f1+f2;}时
首先执行fun(n-1,&f1); 进入递归 那么还会否执行后面的fun(n-2,&f2);*s=f1+f2;
当写成这样呢
else
{fun(n-1,&f1);
fun(n-2,&f2);
*s=f1+f2;}
又是一样吗?
这样呢 又是什么情况
else
{fun(n-1,&f1); }
fun(n-2,&f2);
*s=f1+f2;
而根据这个程序fun(6,&x);传送只是一个X的地址
S是储存的X的地址 只有当if(n==1||n==2) *s=1;才能退出循环的么X不是应该输出1么?