1. 程式人生 > >c++作業實驗10第4章課後習題11遞歸(用遞歸方法求f())

c++作業實驗10第4章課後習題11遞歸(用遞歸方法求f())

ace 循環 中間變量 urn 裏的 調用 為什麽 區塊 不知道

// 實驗10第4章課後習題11遞歸.cpp: 定義控制臺應用程序的入口點。
#include "stdafx.h"
using namespace std;
#include<iostream>

int sum(int n)
{
	if (n = 0)
		return 0;
	if (n > 0)
	{
		int c,z=0;
		c = n * n;
		z = sum(n - 1) + z;
		return c;
	}
	if (n < 0)
	{
		return z;
	}
}
int main()
{
	int n;
	cin >> n;
	cout<< sum(n);
    return 0;
}

  搞不清楚為什麽return z;會報錯

關於c++多行註釋

註釋(comments)是源代碼的一部分,但他們會被編譯器忽略。它們不會生成任何執行代碼。使用註釋的目的只是使程序員可以在源程序中插入一些說明解釋性的內容。

c++支持兩中插入註釋的方法:

//代碼單行註釋

第一種方法為行註釋,它告訴編譯器忽略從//開始至本行結束的任何內容。

/*代碼區塊註釋,也就是多行註釋*/

第二種為塊註釋(段註釋),告訴編譯器忽略在/*符號和*/符號之間的所有內容,可能包含多行內容。

如果你在源程序中插入了註釋而沒有用//符號或/*和*/符號,編譯器會把它們當成c++的語句,那麽在編譯時就會出現一個或多個錯誤信息,程序將不會被運行。

// 實驗10第4章課後習題11遞歸.cpp: 定義控制臺應用程序的入口點。
#include "stdafx.h"
using namespace std;
#include<iostream>

int sum(int n)
{
	if (n == 0)			//再一次被判斷是否相等坑了“==”不等於“=”
		return 0;
	if (n > 0)
	{
		int c,z=0;		//遞歸調用和循環差距是比較大的,自己想一下邏輯就知道了
		c = n * n;
		z = sum(n - 1) + z;
		return c;
	}
	/*if (n < 0)		這裏的語句是可以不用的,因為當n==0的時候返回值為0(這個想法是錯誤的以後要註意)
	{					
		return z;		不知道這裏return z;為什麽會報錯,
	}					???????????????????*/
}
int main()
{
	int n;
	cin >> n;
	cout<< sum(n);
    return 0;
}

  寫完之後出現了戲劇性的一幕,

本來我想著這個代碼寫出來應該輸入任何值都會輸出0

但是測試發現居然可以,

最後思考得到原來遞歸和循環還是有較大的差別的,

不能一循環的思維考慮遞歸

還有就是遞歸一般是要引入中間變量的

c++作業實驗10第4章課後習題11遞歸(用遞歸方法求f())