函式的巢狀呼叫與遞迴(初學者)

2021-10-01 05:22:47 字數 1179 閱讀 6298

1、函式的巢狀呼叫

巢狀定義是在定義乙個函式時,其函式體內又包含另乙個函式的完整定義。

然而,c語言不能巢狀定義函式,但可以巢狀呼叫函式,也就是說,在呼叫乙個函式的過程中,又呼叫另乙個函式。

例:main()

a();

a()b();

b()return;

例題:計算s=2²!+3²!

思路:(1)可編寫兩個函式,乙個是用來計算平方值的函式square,另乙個是用來計算階乘值的函式factorial。

(2)主函式先調square計算出平方值,再在square中以平方值為實參,呼叫factorial函式計算其階乘值,再返回主函式,在迴圈程式中計算累加和。

#include #include

long square(int

p);long factorial(int

q);void

main()

printf(

"%ld\n

",s);

}long square(int

p)long factorial(int

q)

return

c;}

2、遞迴

在呼叫乙個函式的過程中又出現直接或間接地呼叫該函式本身,稱為函式的遞迴呼叫。c語言的特點之一就在於允許函式的遞迴呼叫。

例:int flint (x)

int y,z;

z=flint(y);

return (2*z);

注:遞迴函式必須要有乙個退出條件!

例:用遞迴的方法求n!

思路:求n!也可用遞迴的方法,即5!=4!*5,4!=3!*4……可用如下遞迴公式表示:

n=1  (n=0,1)

n*(n-1)!  (n>1)

#include #include

long recusion(int

n);void

main()

long recusion(int

n)

else

if(n==0||n==1

)

else

return

tomp_result;

}

注:遞迴演算法是效率低下的演算法,但有些問題卻只能用遞迴演算法才能實現。如:hanoi塔問題。

初學者 遞迴

program xuexi3 implicit none integer,external fact 呼叫函式需要寫external 待定 integer n write n read n write fact n stop endrecursive integer function fact n ...

函式(初學者)

乙個較大的程式可分為若干個程式模組,每乙個模組用來實現乙個特定的功能。在高階語言中用子程式實現模組的功能,子程式由函式來完成。乙個c程式可由乙個主函式和若干個其他函式構成。函式間的呼叫關係 由主函式呼叫其他函式,其他函式也可以相互呼叫。同乙個函式可以被乙個或多個函式呼叫任意多次。例 include ...

初學者如何理解遞迴

0 遞迴的定義 如果你沒明白遞迴的定義,參見本文 0.遞迴的定義 1 從斐波那契數列開始 斐波那契的遞推公式 斐波那契數列遞迴演算法和遞推公式類似 int fibo int x 就這麼簡單?沒錯,通過這個例子可以看出,遞迴函式只需要寫兩部分,乙個是遞迴終止條件 if x 3 return 1 乙個是...