久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: c語言遞歸 [打印本頁]

作者: 51黑黑黑    時間: 2016-2-13 02:25
標題: c語言遞歸
   我們寫程序的時候總有些變量以及對這寫變量執行操作的代碼,代碼都是一個一個函數來組織的。我們可以把這些函數成為功能模塊;更專業的說法是成為線程.函數中的變量跟那寫對數據執行操作的代碼是分別存放在不同的內存塊中的:局部變量我們存放在棧,全局變量存放在堆;棧是線成專用的,所以局部變量有局部性,只能在本函數里操作。在調用一個方程的時候;要給傳參數,一般的情況是參數被傳到棧里,然后參數的下面給方程開辟棧,所以方程能知道參數壓在哪里。

好知道是這樣以后;我們來寫一個程序使用遞歸來實現N的階乘;
N!=N*(N-1)*(N-2)....*2*1;
程序如下:
#include <stdio.h>
int func(int n)
{

if(n==0) //N是零了嗎?是就返回1.
return 1;
return n*func(n-1); //不是就調用FUNC(N-1)
}

void main()
{
int n=4;
printf("result is %d",func(n));
}


這里面func(n-1)就是在使用遞歸;
首先第一步在main()里調用func(n)
此時候參數為4;
所以不會執行return 1;
但參數4已經被壓在它的棧低下面了(參數壓棧后才到線程的棧底哦)
接著執行4*func(3);
但要執行本式子的話;但先算出func(3);

所以有去調用func(3);
參數3又被壓到棧底下面使用;但這次的棧給上面的棧是不同的;所以上面的參數4還能保存在;不被破壞.
此時候參數為3;
所以不會執行return 1;
接著執行3*func(2);
但要執行本式子的話;但先算出func(2);

所以有去調用func(2);
參數2又被壓到棧底下面使用;但這次的棧給上面的棧是不同的;所以上面的參數3還能保存在;不被破壞.
此時候參數為3;
所以不會執行return 1;
接著執行2*func(1);
但要執行本式子的話;但先算出func(1);

所以有去調用func(1);
參數1又被壓到棧底下面使用;但這次的棧給上面的棧是不同的;所以上面的參數2還能保存在;不被破壞.
此時候參數為1;
所以不會執行return 1;
接著執行1*func(0);
但要執行本式子的話;但先算出func(0);

所以有去調用func(0);
這次參數為0;所以返回1;

返回后;程序運行到哪里?
在哪里調用就返回到那里!!!
所以返回到func(1)里面的1*func(0);

在func(1)執行1*1;后返回.
這次返回到哪里?當然是在哪里被調用就返回到哪里!!!

所以返回到func(2)里的2*func(1);算出結果2*1*1.
所以返回2*1*1;

這次返回到哪里?當然是在哪里被調用就返回到哪里!!!

所以返回到func(3)里的3*func(2);算出結果3*2*1*1.
所以返回3*2*1*1;

這次返回到哪里?當然是在哪里被調用就返回到哪里!!!

所以返回到func(4)里的4*func(3);算出結果4*3*2*1*1.
所以返回4*3*2*1*1;

這次返回到哪里?當然是在哪里被調用就返回到哪里!!!

所以返回到main()里的printf(....)!!!

在本程序中就是先把所有東西列出來;在往回計算.

呵呵 ,就是這樣.






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 91麻豆精品国产91久久久资源速度 | 日韩av免费在线观看 | 亚洲国产一区在线 | 免费看国产a| 欧美日韩成人影院 | 国产在线精品一区 | 天天躁日日躁狠狠的躁天龙影院 | 81精品国产乱码久久久久久 | 国产欧美精品一区二区三区 | 亚洲欧美综合 | 日本黄色激情视频 | 成人精品国产 | 欧美久久精品一级黑人c片 91免费在线视频 | 国产视频导航 | 久久久久国产一区二区三区 | 成人动漫视频网站 | 曰批视频在线观看 | 亚洲精品久久久久中文字幕欢迎你 | 一区二区三区四区在线播放 | 久久狠狠 | 国产成人精品一区二区三区 | 综合色播 | 日韩三级电影一区二区 | 成人在线精品视频 | 免费在线观看黄视频 | 在线色网址 | av在线播放网 | 91国产视频在线观看 | 色网在线观看 | 午夜国产一级片 | 亚洲视频在线播放 | 国产成人精品久久二区二区91 | 国产激情一区二区三区 | 亚洲综合婷婷 | 亚洲五码久久 | 国产一区二区三区在线看 | 国产精品成人69xxx免费视频 | 日韩久久久一区二区 | 日韩二| 久久9久| 综合一区二区三区 |