遞迴的四條基本法則:(引自《資料結構與演算法分析——c語言描述》mark allen weiss 著)
1. 基準情形。
2. 不斷推進。
3. 設計法則。
4. 合成效益法則。
這裡說下return的作用域:
return 對當前函式來說是結束了,對呼叫它的父函式來說你這個函式執行完成了,父函式就會接著執行下一語句。
沒想到父函式馬上又遇到乙個return,父函式結束了,對爺爺函式來說父函式執行完成了,爺爺函式就接著執行下乙個語句
完,回到最初呼叫遞迴函式的地方。
該函式的基準情形就是 num <= 1 的情況,這種情況下,無需遞迴就能解出,也就是直接返回1. 而 return numfact(num-1); 則是「不斷推進」。 return 8fact(8-1); 則需要知道fact(7),要知道fact(7),則需要return 7fact(7-1); 要知道fact(6),則需要return 6fact(6-1); .。。。如此下去,直到遇到「基準情形」。前面的父函式,爺爺函式比喻的很形象。
所以在之前的地方加了個return就得到正確的結果了,修改前的**如下:
/**
* 獲取指定日期的下乙個工作日
* @param date 日期(不含時間)
* @return
* @author wangzz
* @date 2019/03/21 17:51:06
*/@override
public date getnextworkday(date date)
} catch (exception e) ",e);
}return c.gettime();
}
修改後的**:
/**
* 獲取指定日期的下乙個工作日
* @param date 日期(不含時間)
* @return
* @author wangzz
* @date 2019/03/21 17:51:06
*/@override
public date getnextworkday(date date)
} catch (exception e) ",e);
}return c.gettime();
}
可以看出修改前的 呼叫了this.getnextworkday(c.gettime()); 但是返回值並沒有處理,由於getnextworkday()方法呼叫了getnextworkday()方法後,每個getnextworkday()方法都有自己的返回值,只有第一層的getnextworkday()方法才會把自己的返回值輸出給呼叫他的程式。
例如:若有程式呼叫了getnextworkday(1)後,getnextworkday(2)將返回值返回給了getnextworkday(1),getnextworkday(3)將返回值返回給了getnextworkday(2),以此類推。執行完getnextworkday(5)後,getnextworkday(1)還會向下執行,最後結果不論如何返回值都是getnextworkday(1)的結果.
所以要想這裡的結果正確,設定乙個標誌位接收每個getnextworkday()方法返回的值即可。即,
date nextworkday = this.getnextworkday(calendarentity.getdaytime());
c.settime(nextworkday);
這兩行**,將返回值賦值到物件中,把每個返回值處理了,最後才可得到getnextworkday(5)的結果。
return的問題總結
1.c程式在主函式中不加return 0結束語句是否可以?這個要看main函式的型別,如果是int main 要加,是void main 則不用加,main函式也是乙個函式,如果有型別就要返回 2.c語言中什麼時候該用return,什麼時候不用?當你定義函式的時候才要用,有些函式有返回值,也就是呼叫...
C 當return 遇到遞迴
之前在用return 時,沒有遇到過遞迴情況,但是當我遇到遞迴情況的時候,有點不清晰了,相信這樣的人也不在少數,因此這裡我會給出當遞迴遇到return 會產生的結果。include void fun int x printf yes n int main int argc,char const ar...
js遞迴原理之return
先看以下 var a 1 function multiply n a n multiply n 1 console.log n n console.log a a console.log multiply 5 開啟chrome瀏覽器斷點除錯,js執行過程 執行過程 a n multiply n 1 ...